{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "import numpy as np\n",
    "import soundfile as sf\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def qsnr(orig, quant):\n",
    "    \"\"\"Calculate the QSNR between two tensors\n",
    "    \"\"\"\n",
    "    qerr = orig - quant\n",
    "    sum_err = np.sum(qerr * qerr)\n",
    "    sum_orig = np.sum(orig * orig)\n",
    "    if sum_err > 0:\n",
    "        if sum_orig < sum_err:\n",
    "            if sum_orig == 0:\n",
    "                return -math.inf\n",
    "            else:\n",
    "                # Means error is larger than signal\n",
    "                return -int(round(10 * math.log10(sum_err/sum_orig), 0))\n",
    "        # Error portion of signal\n",
    "        return int(round(10 * math.log10(sum_orig/sum_err), 0))\n",
    "    # Means no error\n",
    "    return math.inf\n",
    "\n",
    "def mse(orig, quant, Size):\n",
    "    mse = 0\n",
    "    for i in range(Size):\n",
    "        mse += (orig.real[i] - quant.real[i]) ** 2\n",
    "        mse += (orig.imag[i] - quant.imag[i]) ** 2\n",
    "    return mse\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "data, samplerate = sf.read(\"samples/yes.wav\")\n",
    "frame_size = 1024\n",
    "frame_step = 160\n",
    "\n",
    "frame_idx= 0\n",
    "frame = data[frame_idx*frame_step:frame_idx*frame_step+frame_size]\n",
    "win_frame = frame * np.hanning(frame_size)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [],
   "source": [
    "out_window_c = np.array([\n",
    "\t\t-0.000000, -0.000000, -0.000000, -0.000001, -0.000001, -0.000001, 0.000000, -0.000000, -0.000001, -0.000002, -0.000007, -0.000006, -0.000002, -0.000001, 0.000002, -0.000005, -0.000014, -0.000013, -0.000009, -0.000017, -0.000025, -0.000018, -0.000026, -0.000025, -0.000024, -0.000026, -0.000016, 0.000007, -0.000041, -0.000087, -0.000029, 0.000004, -0.000037, -0.000040, -0.000054, -0.000085, -0.000050, -0.000051, -0.000054, -0.000022, -0.000051, -0.000137, -0.000173, -0.000125, -0.000115, -0.000102, -0.000071, -0.000092, -0.000124, -0.000137, -0.000112, -0.000235, -0.000226, -0.000047, -0.000081, -0.000181, -0.000163, 0.000068, -0.000041, -0.000350, -0.000242, -0.000086, -0.000008, -0.000122, -0.000242, -0.000194, -0.000209, -0.000171, -0.000151, -0.000124, -0.000250, -0.000273, -0.000134, -0.000184, -0.000230, -0.000514, -0.000545, -0.000292, -0.000175, -0.000086, -0.000320, -0.000362, -0.000249, -0.000328, -0.000588, -0.000806, -0.000365, -0.000167, -0.000567, -0.000686, -0.000447, -0.000645, -0.000929, -0.000724, -0.000610, -0.000278, -0.000369, -0.000789, -0.000666, -0.000798, -0.001015, -0.000826, -0.000725, -0.000748, -0.000565, -0.000795, -0.001156, -0.001027, -0.000626, -0.000742, -0.000980, -0.000583, -0.000702, -0.001326, -0.001777, -0.001545, -0.001084, -0.000702, -0.000524, -0.000654, -0.000842, -0.000840, -0.001163, -0.001236, -0.000539, -0.001091, -0.000851, -0.000862, -0.000995, -0.000589, -0.000815, -0.000603, -0.001493, -0.001105, -0.000608, -0.001080, -0.000907, -0.000799, -0.001134, -0.001563, -0.000948, -0.000709, -0.000663, -0.000833, -0.001628, -0.001478, -0.000783, -0.000980, -0.001769, -0.001536, -0.000640, -0.000900, -0.001678, -0.001036, -0.000663, -0.001237, -0.002107, -0.001898, -0.000936, -0.000923, -0.000613, -0.000405, -0.000107, -0.000888, -0.001681, -0.001320, -0.000998, -0.001028, -0.001013, -0.000657, -0.000434, -0.000575, -0.001575, -0.001725, -0.000423, 0.000024, -0.000785, -0.001173, -0.001325, -0.001407, -0.001513, -0.001056, -0.000148, -0.000571, -0.001424, -0.001031, -0.000506, -0.000305, -0.000843, -0.000360, -0.000129, -0.000545, -0.000992, -0.001810, -0.000923, -0.000980, -0.001118, -0.000668, -0.000618, -0.001133, -0.002033, -0.000953, -0.000875, -0.000961, -0.001433, -0.001771, -0.000944, -0.000976, -0.000672, -0.000421, -0.000592, -0.001330, -0.000312, 0.000256, -0.000229, -0.000975, -0.000719, -0.000202, -0.001707, -0.001914, -0.000931, -0.000233, -0.000614, -0.000557, -0.001029, -0.000913, 0.000472, -0.000769, -0.001690, -0.000951, 0.000149, 0.000030, -0.000956, -0.000239, 0.000450, -0.000571, -0.002076, -0.001928, -0.001569, -0.000423, 0.000302, -0.000696, 0.000212, 0.001062, 0.000182, -0.001094, -0.001004, -0.000548, -0.001309, -0.000945, -0.000701, -0.000823, 0.000031, 0.000214, -0.000976, -0.000580, 0.000610, -0.000732, -0.001190, 0.000122, -0.000518, -0.000488, 0.000183, -0.001279, -0.001430, -0.000030, 0.000122, 0.000516, 0.001092, -0.001334, -0.001393, 0.000091, -0.001208, -0.000422, 0.000090, -0.000602, -0.000481, -0.000120, 0.000359, -0.000030, -0.000179, -0.000715, -0.000327, -0.000148, -0.000562, -0.000177, -0.000825, -0.000147, -0.000498, -0.001433, -0.000817, -0.001018, -0.000058, 0.000636, -0.000548, -0.001438, -0.000774, 0.000171, -0.000313, -0.000454, -0.000311, 0.000226, -0.000112, -0.000952, 0.000195, 0.000444, -0.000747, -0.000110, 0.000714, -0.000246, -0.001089, -0.000759, 0.000189, -0.000161, -0.000642, -0.000027, -0.000132, -0.000633, 0.000105, -0.000130, -0.001662, -0.001162, -0.000463, -0.000537, -0.001118, -0.001820, -0.001181, -0.000050, -0.000323, -0.001087, -0.000516, -0.000073, -0.000218, -0.000627, -0.000287, 0.000238, -0.000685, -0.001174, -0.000933, -0.000764, -0.000805, -0.000799, -0.000272, -0.000383, -0.000648, -0.000754, -0.000748, -0.000742, -0.000780, -0.001010, -0.001450, -0.000635, 0.000378, -0.000395, -0.000908, -0.000777, -0.001054, -0.001166, -0.001215, -0.000592, -0.000450, -0.001589, -0.001939, -0.001293, -0.000980, -0.001250, -0.001182, -0.001353, -0.000724, -0.000340, -0.000692, -0.000948, -0.001684, -0.001134, -0.000595, -0.000336, -0.000931, -0.000871, -0.000309, -0.000787, -0.001127, -0.001333, -0.001116, -0.000872, -0.000499, -0.000687, -0.000899, -0.000539, -0.000503, -0.001475, -0.001203, -0.000690, -0.001008, -0.000631, -0.000994, -0.001071, -0.001004, -0.001028, -0.000763, -0.000542, -0.000231, -0.000418, -0.001001, -0.001078, -0.000696, -0.001246, -0.000994, -0.000315, -0.000395, -0.000441, -0.000857, -0.000731, -0.001057, -0.001196, -0.000520, -0.000501, -0.000278, -0.000483, -0.000831, -0.000342, -0.000034, -0.000320, -0.000438, -0.000299, -0.000246, -0.000380, -0.000327, -0.000231, -0.000349, -0.000520, -0.000710, -0.000265, -0.000200, -0.000461, -0.000463, -0.000291, -0.000097, -0.000401, -0.000310, -0.000174, -0.000262, -0.000048, -0.000067, -0.000216, -0.000357, -0.000447, -0.000323, -0.000341, -0.000292, -0.000207, -0.000315, -0.000337, -0.000330, -0.000205, 0.000000, -0.000243, -0.000332, -0.000175, -0.000269, -0.000241, -0.000102, -0.000129, -0.000167, -0.000067, -0.000089, -0.000140, -0.000146, -0.000211, -0.000163, -0.000129, -0.000121, -0.000105, -0.000083, -0.000070, -0.000120, -0.000101, -0.000079, -0.000060, -0.000038, -0.000050, -0.000033, -0.000041, -0.000106, -0.000099, -0.000055, -0.000058, -0.000052, -0.000043, -0.000026, -0.000025, -0.000045, -0.000039, -0.000016, -0.000015, -0.000025, -0.000020, -0.000013, -0.000012, -0.000011, -0.000014, -0.000016, -0.000007, -0.000003, -0.000005, -0.000003, -0.000003, -0.000002, -0.000000, -0.000000, -0.000000, -0.000000, -0.000000, ])\n",
    "\n",
    "out_swapped_fft = np.array([\n",
    "\t-0.134977-0.134878j, 0.023856+0.048349j, 0.056846+0.032386j, -0.013717-0.001989j, -0.003708-0.014427j, -0.000693+0.000638j, 0.000875+0.006167j, 0.000169+0.000200j, -0.000557+0.003425j, 0.003192-0.002330j, -0.002780-0.005378j, -0.003670+0.000984j, 0.009389+0.002316j, -0.005506+0.002693j, -0.002759-0.005883j, 0.003941+0.004080j, -0.004010+0.002075j, 0.006349-0.004590j, -0.005892+0.001620j, 0.002373+0.001735j, 0.001242-0.001996j, -0.004716+0.000258j, 0.008856-0.001267j, -0.005090-0.000125j, -0.004347+0.004464j, 0.005189-0.002780j, -0.002155-0.000479j, -0.001124-0.002066j, 0.003510-0.003315j, 0.002987+0.014041j, -0.005452-0.010822j, -0.002008+0.003821j, 0.003522-0.002544j, -0.001729+0.001176j, 0.004639+0.002289j, -0.005629-0.005678j, 0.004178+0.006518j, -0.002267-0.005766j, -0.003503+0.006457j, 0.006156-0.008666j, -0.003480+0.010053j, -0.002277-0.009488j, 0.009905+0.006157j, -0.010411-0.004484j, 0.004153+0.007967j, 0.003556-0.008198j, -0.006095+0.002121j, -0.000974+0.000927j, 0.004228+0.000550j, 0.005344-0.001858j, -0.009218+0.001129j, 0.002081+0.001186j, -0.002633-0.000491j, 0.006094-0.002625j, -0.000862+0.000181j, -0.001071+0.006075j, -0.005308-0.006832j, 0.002863+0.005045j, 0.005569-0.004955j, -0.005698+0.001367j, 0.002222+0.000091j, -0.000568+0.006073j, 0.001728-0.011051j, -0.000207+0.000784j, -0.001099+0.007950j, 0.000517+0.004249j, -0.004645-0.008988j, 0.002926+0.000803j, 0.003516+0.000615j, -0.004470+0.001874j, 0.000983+0.001897j, 0.003488-0.009470j, -0.002325+0.009267j, -0.002837-0.005976j, 0.008291+0.007184j, -0.010330-0.006621j, 0.004383+0.003711j, 0.000531-0.003038j, -0.001413-0.001988j, 0.000907+0.007387j, 0.004831-0.006824j, -0.005558+0.004266j, 0.000736-0.000639j, -0.004437+0.000636j, 0.008761-0.000039j, -0.005919+0.003001j, 0.003935-0.006462j, -0.007042+0.004080j, 0.009221-0.004654j, -0.007449+0.002241j, 0.006488-0.000319j, -0.004156+0.007167j, 0.006355-0.011191j, -0.009039+0.009259j, -0.000667-0.007675j, 0.005057+0.006255j, 0.005658-0.008548j, -0.009625+0.007381j, 0.001291-0.001537j, -0.003834-0.000997j, 0.013938-0.001103j, -0.012373+0.004217j, 0.002214+0.000948j, 0.003259-0.004139j, -0.001299+0.003074j, 0.000987-0.008142j, -0.000832+0.013314j, -0.000886-0.010945j, -0.000704-0.000537j, 0.002388+0.008395j, 0.001608-0.007839j, -0.002731+0.003922j, -0.001183-0.000536j, -0.000803+0.005593j, 0.001805-0.003788j, 0.001749-0.007967j, 0.004812+0.012490j, -0.013131-0.016110j, 0.010838+0.010313j, -0.006839+0.007149j, 0.002374-0.009374j, -0.000530+0.007512j, -0.004305-0.011832j, 0.007361+0.009461j, 0.002605-0.003381j, -0.005625-0.006824j, 0.000615+0.017589j, 0.002661-0.012949j, -0.007168-0.011874j, 0.008603+0.022596j, 0.000006-0.007818j, -0.010002+0.001093j, 0.006400+0.000197j, 0.002346+0.004260j, 0.004681-0.021741j, -0.011475+0.018430j, -0.000068+0.001055j, 0.000278-0.006565j, 0.011406+0.011306j, -0.016212-0.013506j, 0.011289+0.009132j, -0.003077-0.012626j, 0.003775+0.017039j, -0.002222-0.009857j, -0.003972+0.002203j, 0.009975-0.006082j, -0.009970+0.008461j, -0.000742-0.003296j, 0.003999-0.006808j, 0.001715+0.010468j, -0.005753-0.002220j, 0.009639-0.000288j, -0.005574-0.002602j, 0.001742-0.004307j, -0.003508+0.012862j, -0.002634-0.016008j, 0.007374+0.011246j, -0.006051+0.004282j, 0.004514-0.009385j, -0.006585+0.003242j, 0.012242-0.001871j, -0.010683-0.002686j, 0.007825+0.004085j, -0.004109+0.002290j, -0.003787+0.001590j, -0.002666+0.000559j, 0.014869-0.011858j, -0.010153+0.008110j, 0.000677-0.001809j, -0.000524+0.000370j, 0.009096+0.001301j, -0.016275-0.001255j, 0.008599-0.001475j, 0.000859+0.007879j, -0.003069-0.007460j, 0.002039+0.003276j, -0.005275-0.006678j, 0.008473+0.013640j, 0.000300-0.018403j, -0.003060+0.016545j, -0.003949-0.003839j, 0.005370-0.004101j, -0.006991+0.000212j, 0.016259+0.000866j, -0.011267-0.003644j, -0.008492+0.006127j, 0.011609+0.002227j, -0.000699-0.006303j, -0.001460-0.000549j, -0.000918+0.005000j, -0.011791-0.005272j, 0.009268+0.002169j, 0.012303+0.005672j, -0.001120-0.006035j, -0.018272+0.001553j, 0.011190-0.009855j, 0.000524+0.014603j, 0.001242-0.009734j, -0.010003+0.006907j, 0.015042-0.000265j, -0.014389-0.001777j, 0.007178-0.000309j, -0.002035-0.001496j, 0.001857+0.001164j, -0.003438-0.001240j, 0.003313+0.006741j, 0.006438-0.014036j, -0.010079+0.010041j, 0.005520+0.000391j, -0.011445+0.002517j, 0.012960-0.011443j, -0.007950+0.005730j, 0.005923+0.005380j, -0.004805-0.004072j, 0.007910-0.000118j, -0.005427+0.000581j, 0.003560-0.006988j, -0.009562+0.013284j, 0.007312-0.003577j, -0.001658-0.006584j, 0.001598+0.005750j, -0.002670-0.004657j, 0.002647+0.003152j, -0.002194-0.001450j, 0.001939+0.002013j, -0.001306-0.002422j, -0.004168+0.001379j, 0.011679-0.004311j, -0.008498+0.004846j, 0.003420-0.000642j, -0.000786+0.000850j, -0.004214+0.004216j, 0.002898-0.007982j, 0.001364-0.003801j, 0.000882+0.011602j, -0.003442-0.007468j, -0.000163+0.001456j, 0.002215+0.003381j, 0.000964-0.006010j, -0.005447+0.006829j, 0.002630-0.005182j, 0.005284+0.004365j, -0.007314-0.001814j, 0.003626-0.007248j, 0.002603+0.010309j, 0.000496-0.003081j, -0.005301-0.003636j, -0.003381+0.002916j, 0.004429+0.000212j, -0.000043-0.000134j, 0.006590+0.000850j, 0.000844-0.000476j, -0.015304-0.004140j, -0.002035-0.014139j, 0.033198+0.058412j, 0.048902+0.023877j, ])\n",
    "\n",
    "out_rfft = np.array([\n",
    "\t-0.269855+0.000000j, 0.072643+0.024315j, 0.090117-0.025948j, -0.015720+0.012208j, -0.019063-0.010479j, 0.000204+0.001319j, 0.007442+0.005250j, 0.000087+0.000058j, 0.003990+0.003909j, -0.000165-0.005922j, -0.008668-0.001570j, -0.002345+0.004238j, 0.011742-0.008279j, -0.002463+0.009841j, -0.009218-0.003621j, 0.008886-0.000255j, -0.001566+0.007188j, 0.000325-0.011712j, -0.003854+0.007641j, 0.004765-0.001490j, 0.000107-0.002342j, -0.007403+0.005398j, 0.008785-0.011655j, -0.002850+0.005484j, -0.001356+0.010200j, -0.000248-0.008197j, -0.001080-0.000073j, 0.000607+0.001877j, -0.003796-0.009991j, 0.013407+0.011554j, -0.008984-0.003803j, -0.000877+0.003188j, 0.002182-0.002909j, -0.002179+0.001153j, 0.005726-0.002444j, -0.008231+0.002986j, 0.007882-0.003405j, -0.007378+0.003391j, 0.005622+0.009199j, -0.003273-0.019015j, 0.003051+0.010903j, -0.008513-0.004267j, 0.011043+0.000781j, -0.009892+0.004370j, 0.011217-0.001378j, -0.006265-0.011214j, 0.004592+0.017325j, -0.007621-0.006122j, 0.005624+0.000355j, -0.003357-0.014623j, -0.002159+0.017699j, 0.006270-0.004600j, -0.003970+0.000567j, 0.002111-0.003138j, -0.002328+0.000780j, 0.007881+0.004611j, -0.016056-0.003307j, 0.014702+0.005775j, -0.006564-0.012464j, -0.003063+0.010921j, 0.006247-0.012820j, 0.007927+0.013559j, -0.018607-0.010270j, -0.002861+0.004916j, 0.015156+0.001061j, 0.010265+0.001800j, -0.015723+0.000842j, 0.001571-0.005532j, -0.000794-0.001114j, -0.002639+0.006996j, 0.011666+0.001744j, -0.008162-0.010376j, -0.008469+0.001446j, 0.012569+0.004540j, -0.003099-0.004131j, 0.000521+0.007760j, -0.003168+0.001345j, 0.001236-0.016316j, -0.005727+0.017036j, 0.013757-0.009656j, -0.008174+0.002733j, 0.003481-0.000595j, -0.004940+0.005813j, 0.002698-0.005857j, 0.008221+0.001325j, -0.015131-0.001234j, 0.007489-0.000364j, 0.000145+0.001478j, -0.000342-0.000587j, -0.007617-0.008151j, 0.011684+0.013092j, -0.001047+0.000159j, -0.005352-0.004219j, -0.001928-0.000739j, 0.006733-0.002518j, -0.009344-0.000271j, 0.009997+0.002735j, -0.004721-0.002297j, 0.002440+0.009599j, -0.005409-0.004565j, 0.009274-0.012055j, -0.004816+0.017271j, -0.001197-0.013411j, 0.000502+0.003881j, -0.005414+0.001992j, 0.008293+0.001326j, -0.004184+0.001764j, 0.001611-0.010144j, 0.003036+0.007269j, -0.000111+0.003004j, -0.009761-0.009722j, 0.009613+0.007374j, -0.003782-0.002459j, -0.002600+0.009691j, 0.004893-0.016774j, -0.004682+0.012112j, 0.012841-0.008540j, -0.018191+0.013164j, 0.012727-0.011190j, 0.000288+0.006959j, -0.000470-0.001195j, -0.010342-0.018852j, 0.003434+0.022026j, 0.002772-0.004401j, 0.006320-0.000106j, -0.010106-0.001175j, 0.000126+0.007812j, 0.008662-0.022560j, -0.007168+0.011874j, 0.002602+0.012986j, 0.000495-0.017595j, -0.005521+0.006741j, 0.002686+0.003472j, 0.006935-0.009602j, -0.003058+0.012117j, -0.001664-0.007934j, 0.002776+0.009234j, -0.006849-0.006755j, 0.009517-0.010197j, -0.011152+0.015768j, 0.003261-0.011898j, 0.003354+0.007453j, 0.000686+0.004054j, -0.000425-0.005759j, -0.001372+0.000280j, -0.002369-0.002630j, 0.001399+0.006578j, 0.001757-0.008688j, 0.000259+0.000998j, -0.000782+0.011269j, -0.002400-0.013769j, 0.002332+0.009180j, -0.001459-0.003684j, 0.004499+0.003713j, -0.000097-0.001497j, -0.010190-0.002954j, 0.012038+0.000293j, -0.004476+0.000714j, 0.003364+0.001751j, -0.011489-0.006437j, 0.007902+0.009411j, 0.003717-0.009211j, 0.000425+0.009241j, -0.011220-0.007708j, 0.007921+0.008562j, -0.005775-0.006449j, 0.009673+0.001553j, -0.009985-0.002282j, 0.010240+0.002258j, -0.007711-0.002233j, 0.005542+0.007399j, -0.007063-0.005490j, 0.009139-0.000110j, -0.006277+0.001386j, 0.002607-0.001007j, -0.007000-0.001584j, 0.007730+0.002879j, -0.004377-0.003403j, 0.004614+0.000622j, -0.003766+0.003266j, 0.003601-0.006205j, -0.005481+0.010279j, 0.004398-0.011103j, 0.000853+0.011382j, -0.005123-0.011465j, 0.003158+0.005221j, 0.000926+0.002074j, -0.002531-0.001181j, 0.002849-0.002277j, 0.000437-0.001335j, -0.000714+0.004558j, -0.000480-0.000281j, -0.003952-0.001217j, 0.001534-0.001903j, 0.002063+0.002334j, 0.002695-0.002369j, -0.003501+0.001692j, -0.001392-0.000180j, 0.002130-0.000602j, 0.003203+0.000466j, -0.003641+0.001749j, -0.001774-0.001774j, -0.000570-0.000896j, 0.005840+0.000651j, -0.002101-0.000182j, -0.000876+0.000955j, -0.000621+0.002534j, -0.001379-0.002725j, 0.004124+0.000197j, -0.004798-0.004533j, 0.002273+0.003761j, 0.001871+0.002714j, -0.001141-0.003965j, -0.005324+0.004782j, 0.006772-0.005494j, 0.000809+0.005802j, -0.002971-0.006138j, -0.000134+0.002936j, -0.001813-0.000834j, 0.003454+0.002573j, -0.002106-0.004172j, -0.000068+0.004007j, 0.001559-0.001581j, -0.001744-0.001473j, 0.003279+0.001649j, -0.002437-0.003055j, -0.000636+0.008399j, 0.001259-0.006797j, -0.001192-0.001830j, 0.001689+0.003301j, -0.001862+0.001257j, 0.001223-0.001201j, -0.000093-0.002246j, -0.000877+0.001808j, 0.000952+0.001214j, -0.000755-0.002328j, 0.000972+0.001110j, -0.000177+0.000155j, -0.001073+0.000010j, 0.000578-0.000293j, 0.000186-0.000069j, 0.000338+0.000030j, -0.000856+0.000449j, 0.000584-0.000101j, 0.000250-0.000286j, -0.000828+0.000173j, 0.000587+0.000172j, -0.000024-0.000676j, -0.000118+0.000696j, 0.000039-0.000275j, 0.000024-0.000067j, -0.000052+0.000205j, 0.000051-0.000192j, -0.000032+0.000059j, -0.000073+0.000078j, 0.000116-0.000157j, -0.000099+0.000000j, ])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-9.9e-05+0j)"
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "out_rfft[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-9.899960548409581e-05+0j)"
      ]
     },
     "execution_count": 135,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np_fft = np.fft.rfft(out_window_c.astype(np.float32))\n",
    "np_fft[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f61034afd90>]"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(np.abs(out_rfft[-10:]))\n",
    "plt.plot(np.abs(np_fft[-10:]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "metadata": {},
   "outputs": [],
   "source": [
    "Shift = 5\n",
    "out_preemph_c = np.array([\n",
    "\t\t-2272, -2016, -2976, -3712, -3392, -3072, -2848, -3840, -3296, -2752, -3296, -2848, -2176, -2592, -3552, -3008, -2848, -3584, -3904, -2848, -1920, -1888, -1568, -2784, -4000, -2944, -2432, -3840, -4352, -3360, -2784, -3072, -3328, -3072, -2624, -2656, -2016, -2080, -3200, -2656, -4544, -4576, -2752, -3328, -2400, -2720, -3456, -2688, -2400, -3168, -3264, -3296, -3072, -2688, -3168, -2560, -2624, -3168, -3456, -2400, -2080, -3808, -2592, -1440, -2784, -4192, -2880, -2592, -4256, -3264, -3104, -3680, -2656, -3008, -3584, -2944, -3456, -3872, -3264, -3136, -3232, -3552, -3712, -4096, -4160, -2400, -3488, -4736, -3840, -5056, -4608, -3456, -3872, -3136, -3264, -3520, -3712, -5120, -4192, -2688, -4096, -4768, -3616, -4384, -4672, -4448, -4224, -3168, -3456, -2944, -3840, -4448, -3744, -4512, -3712, -3264, -3776, -3584, -2976, -3552, -4000, -3520, -3136, -3840, -4672, -2848, -2048, -3616, -4704, -5408, -5024, -4000, -3712, -2560, -2112, -4128, -4640, -4480, -4608, -3680, -3712, -3680, -3936, -3680, -3456, -3712, -3552, -3520, -3456, -4352, -3296, -2592, -3872, -3584, -4960, -5184, -3584, -3328, -2240, -2560, -3264, -2880, -3744, -4512, -4512, -3040, -2976, -3936, -3680, -2336, -3264, -4192, -2304, -2560, -2752, -3232, -4320, -3648, -2592, -2368, -3808, -5216, -4032, -2560, -2304, -2912, -3776, -3072, -3104, -3840, -2432, -4224, -5408, -4000, -3648, -3776, -4992, -4192, -3232, -3264, -4224, -4256, -3232, -3840, -3456, -2816, -3328, -3616, -3264, -2912, -3360, -3904, -3680, -2080, -2688, -3776, -3296, -2976, -3168, -3296, -3360, -3776, -2688, -2592, -2656, -2752, -3680, -3904, -3232, -2464, -1824, -2624, -3360, -1408, -1824, -3008, -2176, -2176, -3360, -2816, -1504, -2272, -3296, -4032, -3616, -3008, -2336, -1952, -2400, -2720, -2304, -2848, -3328, -1824, -2112, -2656, -2656, -2336, -1792, -2240, -2272, -2944, -2848, -1632, -1344, -2304, -2848, -1664, -1632, -2592, -2080, -1536, -2432, -2720, -1696, -1504, -1888, -1728, -2560, -2912, -3296, -3552, -1920, -1536, -2144, -2720, -1824, -800, -1344, -2816, -3360, -2624, -2624, -2656, -3168, -3520, -3136, -3584, -3360, -1632, -2112, -3264, -3008, -3776, -2848, -2528, -3488, -2720, -2560, -3552, -3168, -2144, -3168, -3456, -3360, -3616, -2720, -2400, -3008, -3360, -3360, -3296, -2976, -2752, -2080, -1984, -3360, -3456, -2240, -1952, -3520, -4992, -3136, -2528, -3392, -2336, -2048, -2368, -2496, -3104, -2720, -2976, -3488, -2528, -3040, -3136, -2336, -2080, -2400, -3808, -3360, -2688, -2912, -2752, -2816, -2336, -2336, -2656, -2752, -3488, -3744, -3104, -2304, -2592, -2816, -2304, -3328, -4672, -3168, -2048, -2976, -3008, -2368, -2272, -2880, -3296, -2208, -2144, -3488, -3104, -3328, -3808, -2784, -2144, -2176, -2784, -3264, -3648, -3776, -2880, -3104, -3104, -2944, -2784, -3072, -3904, -3136, -2432, -3776, -3776, -3392, -3456, -3584, -4032, -3360, -3296, -2816, -2880, -3968, -3744, -2624, -2976, -2560, -2304, -3072, -3008, -3008, -2688, -2112, -2400, -3072, -2304, -2176, -2944, -3360, -3392, -2240, -1472, -2432, -3328, -2208, -1856, -2496, -2240, -2368, -2976, -2976, -2208, -2112, -2144, -2240, -2432, -2592, -1984, -2400, -2816, -1728, -2240, -1760, -1216, -2400, -2720, -3136, -2464, -1888, -3008, -2816, -1600, -1760, -2944, -3008, -1728, -1472, -2176, -2464, -2464, -1952, -1728, -1472, -1472, -1376, -1120, -1184, -1760, -3072, -2720, -1664, -1056, -1568, -3520, -3520, -1696, 0, -576, -2816, -2720, -2112, -1952, -1472, -1984, -2624, -2848, -2400, -1920, -1504, -1440, -2144, -2496, -1280, -1760, -2944, -1728, -864, -2112, -2656, -544, -1024, -2496, -2144, -2080, -2272, -2304, ])\n",
    "\n",
    "input_frame = np.array([\n",
    "\t\t-71, -63, -93, -116, -106, -96, -89, -120, -103, -86, -103, -89, -68, -81, -111, -94, -89, -112, -122, -89, -60, -59, -49, -87, -125, -92, -76, -120, -136, -105, -87, -96, -104, -96, -82, -83, -63, -65, -100, -83, -142, -143, -86, -104, -75, -85, -108, -84, -75, -99, -102, -103, -96, -84, -99, -80, -82, -99, -108, -75, -65, -119, -81, -45, -87, -131, -90, -81, -133, -102, -97, -115, -83, -94, -112, -92, -108, -121, -102, -98, -101, -111, -116, -128, -130, -75, -109, -148, -120, -158, -144, -108, -121, -98, -102, -110, -116, -160, -131, -84, -128, -149, -113, -137, -146, -139, -132, -99, -108, -92, -120, -139, -117, -141, -116, -102, -118, -112, -93, -111, -125, -110, -98, -120, -146, -89, -64, -113, -147, -169, -157, -125, -116, -80, -66, -129, -145, -140, -144, -115, -116, -115, -123, -115, -108, -116, -111, -110, -108, -136, -103, -81, -121, -112, -155, -162, -112, -104, -70, -80, -102, -90, -117, -141, -141, -95, -93, -123, -115, -73, -102, -131, -72, -80, -86, -101, -135, -114, -81, -74, -119, -163, -126, -80, -72, -91, -118, -96, -97, -120, -76, -132, -169, -125, -114, -118, -156, -131, -101, -102, -132, -133, -101, -120, -108, -88, -104, -113, -102, -91, -105, -122, -115, -65, -84, -118, -103, -93, -99, -103, -105, -118, -84, -81, -83, -86, -115, -122, -101, -77, -57, -82, -105, -44, -57, -94, -68, -68, -105, -88, -47, -71, -103, -126, -113, -94, -73, -61, -75, -85, -72, -89, -104, -57, -66, -83, -83, -73, -56, -70, -71, -92, -89, -51, -42, -72, -89, -52, -51, -81, -65, -48, -76, -85, -53, -47, -59, -54, -80, -91, -103, -111, -60, -48, -67, -85, -57, -25, -42, -88, -105, -82, -82, -83, -99, -110, -98, -112, -105, -51, -66, -102, -94, -118, -89, -79, -109, -85, -80, -111, -99, -67, -99, -108, -105, -113, -85, -75, -94, -105, -105, -103, -93, -86, -65, -62, -105, -108, -70, -61, -110, -156, -98, -79, -106, -73, -64, -74, -78, -97, -85, -93, -109, -79, -95, -98, -73, -65, -75, -119, -105, -84, -91, -86, -88, -73, -73, -83, -86, -109, -117, -97, -72, -81, -88, -72, -104, -146, -99, -64, -93, -94, -74, -71, -90, -103, -69, -67, -109, -97, -104, -119, -87, -67, -68, -87, -102, -114, -118, -90, -97, -97, -92, -87, -96, -122, -98, -76, -118, -118, -106, -108, -112, -126, -105, -103, -88, -90, -124, -117, -82, -93, -80, -72, -96, -94, -94, -84, -66, -75, -96, -72, -68, -92, -105, -106, -70, -46, -76, -104, -69, -58, -78, -70, -74, -93, -93, -69, -66, -67, -70, -76, -81, -62, -75, -88, -54, -70, -55, -38, -75, -85, -98, -77, -59, -94, -88, -50, -55, -92, -94, -54, -46, -68, -77, -77, -61, -54, -46, -46, -43, -35, -37, -55, -96, -85, -52, -33, -49, -110, -110, -53, 0, -18, -88, -85, -66, -61, -46, -62, -82, -89, -75, -60, -47, -45, -67, -78, -40, -55, -92, -54, -27, -66, -83, -17, -32, -78, -67, -65, -71, -72, ])\n",
    "out_window_c = np.array([\n",
    "\t\t0, 0, 0, -1, -2, -3, -4, -7, -8, -8, -12, -13, -12, -16, -26, -25, -27, -39, -48, -39, -29, -31, -28, -55, -86, -69, -62, -105, -128, -106, -94, -110, -127, -125, -113, -121, -97, -106, -171, -150, -269, -285, -179, -227, -171, -203, -269, -218, -203, -279, -299, -314, -303, -275, -336, -282, -299, -373, -421, -302, -270, -511, -359, -205, -409, -635, -449, -415, -701, -553, -540, -658, -487, -566, -692, -583, -701, -805, -695, -683, -721, -810, -866, -977, -1014, -598, -887, -1230, -1018, -1368, -1273, -973, -1112, -918, -974, -1070, -1150, -1615, -1346, -879, -1363, -1614, -1245, -1535, -1663, -1610, -1554, -1184, -1312, -1136, -1504, -1769, -1512, -1849, -1544, -1377, -1616, -1556, -1310, -1585, -1810, -1614, -1457, -1808, -2228, -1376, -1002, -1791, -2359, -2745, -2581, -2080, -1953, -1362, -1137, -2248, -2555, -2494, -2594, -2094, -2134, -2138, -2311, -2183, -2071, -2247, -2171, -2173, -2154, -2738, -2093, -1661, -2505, -2339, -3267, -3444, -2402, -2250, -1527, -1760, -2262, -2012, -2637, -3203, -3229, -2192, -2162, -2881, -2714, -1735, -2442, -3159, -1748, -1956, -2117, -2503, -3367, -2862, -2047, -1882, -3045, -4196, -3263, -2084, -1887, -2398, -3127, -2559, -2599, -3233, -2058, -3594, -4625, -3438, -3151, -3277, -4353, -3673, -2845, -2886, -3751, -3796, -2895, -3454, -3121, -2553, -3029, -3304, -2993, -2680, -3104, -3619, -3423, -1941, -2517, -3547, -3105, -2812, -3002, -3133, -3202, -3609, -2576, -2490, -2558, -2656, -3560, -3785, -3140, -2399, -1780, -2565, -3290, -1381, -1792, -2960, -2145, -2148, -3321, -2787, -1490, -2254, -3273, -4008, -3598, -2995, -2328, -1947, -2395, -2716, -2301, -2846, -3326, -1824, -2112, -2656, -2656, -2336, -1792, -2239, -2270, -2941, -2843, -1629, -1340, -2296, -2836, -1656, -1622, -2574, -2063, -1522, -2407, -2689, -1674, -1482, -1858, -1698, -2511, -2852, -3222, -3465, -1869, -1492, -2079, -2631, -1761, -770, -1291, -2698, -3211, -2501, -2494, -2517, -2994, -3316, -2946, -3356, -3136, -1518, -1958, -3015, -2769, -3463, -2602, -2301, -3162, -2456, -2302, -3181, -2825, -1904, -2801, -3042, -2944, -3153, -2361, -2073, -2585, -2873, -2859, -2790, -2506, -2305, -1732, -1643, -2767, -2830, -1824, -1580, -2832, -3991, -2492, -1996, -2661, -1821, -1586, -1822, -1907, -2355, -2050, -2227, -2591, -1864, -2225, -2278, -1684, -1488, -1704, -2682, -2348, -1863, -2002, -1876, -1904, -1566, -1552, -1749, -1796, -2256, -2400, -1971, -1450, -1615, -1738, -1408, -2014, -2800, -1879, -1202, -1729, -1730, -1347, -1279, -1603, -1815, -1202, -1154, -1856, -1633, -1730, -1957, -1413, -1075, -1078, -1362, -1577, -1740, -1778, -1338, -1423, -1404, -1314, -1225, -1333, -1671, -1323, -1011, -1547, -1525, -1349, -1354, -1382, -1531, -1256, -1212, -1019, -1025, -1389, -1289, -888, -990, -837, -740, -969, -932, -915, -802, -618, -689, -865, -636, -589, -781, -873, -863, -558, -359, -580, -776, -504, -414, -544, -477, -492, -604, -589, -426, -398, -393, -400, -423, -439, -327, -385, -439, -262, -329, -251, -168, -322, -354, -395, -300, -222, -343, -310, -170, -180, -291, -286, -158, -130, -184, -200, -192, -146, -123, -100, -96, -86, -66, -67, -94, -156, -131, -76, -45, -64, -134, -126, -57, 0, -17, -77, -69, -49, -42, -29, -36, -43, -43, -33, -23, -16, -14, -18, -18, -8, -10, -13, -6, -3, -5, -5, -1, -1, -1, -1, 0, 0, 0, ])\n",
    "\n",
    "out_swapped_fft = np.array([\n",
    "\t-6015-6017j, 2356+3268j, 624+239j, -367-249j, 222+92j, -300-227j, 203+97j, -44+39j, -68-43j, 56+141j, 9-234j, -12+90j, 18+3j, -47+13j, -1-21j, 38-22j, -30+0j, -38+76j, 71-73j, -100-2j, 92+4j, -75-14j, 61+39j, -7-38j, -68-21j, 87+36j, -87-12j, 90+46j, -116-50j, 74-57j, -24+111j, -9-125j, 12+102j, 12-21j, -26-44j, 22+76j, 59-111j, -123+20j, 47+23j, 22+70j, -10-177j, -45+183j, -10-77j, 60-31j, -81+25j, 72+64j, -35-98j, 10-32j, -4+100j, 51-37j, -69+29j, 25-60j, 30+19j, -73+8j, 23-63j, -33+61j, 86-52j, -107+53j, 56+78j, 17-99j, 5-75j, -114+77j, 138+21j, -36-79j, -89+63j, 159-5j, -106-71j, -50+48j, 44+36j, 28+29j, -86-146j, 144+97j, -52+49j, -25-46j, -4+3j, -1-31j, 114+31j, -227-43j, 197+65j, -85-81j, -29+67j, 92-22j, -76-44j, 60+76j, -92-6j, -21-20j, 189-1j, -100+27j, 20-115j, -5+182j, -63-196j, -13+157j, 71-31j, 5-34j, -79+36j, 81+7j, 32-56j, -112-19j, 34+80j, -12-70j, 33+111j, 38-115j, 32+52j, -73-63j, -74+127j, 98-216j, 10+211j, 14-117j, -126+70j, 80-58j, -7+98j, 142-50j, -275-57j, 165+1j, 98+52j, -315-42j, 215+44j, 57+20j, -130-8j, 110-64j, 2+14j, -176+112j, 226-120j, -207-19j, 163+27j, -143+2j, 135+150j, 13-190j, -63+43j, -34+156j, -56-285j, 181+189j, -198-40j, 168+5j, -211+37j, 218-75j, -46+11j, -72+59j, 105+8j, -10-54j, -188-59j, 147+107j, 77-27j, -102-4j, 28-92j, 76+158j, -215-129j, 142+148j, -6-122j, -45-8j, -13+101j, 117-116j, -248+43j, 343-8j, -199-48j, 48+150j, 100-112j, -246+9j, 154+111j, -17-137j, 28+62j, -14+57j, -4-34j, -92-82j, 113+83j, 3-116j, -201+53j, 352+90j, -342-81j, 295-95j, -246+199j, 78-145j, 81+105j, -10-94j, -97+48j, 76+134j, 66-228j, -131+57j, -73+111j, 165-8j, 8-169j, -77+156j, -59-51j, 23-65j, 136+62j, -89+69j, 46-72j, -71+17j, 107-105j, -172+161j, 64-55j, 96+83j, 47-169j, -209-43j, 58+189j, 88-48j, 4+0j, -128-211j, 78+376j, -10-221j, 2-81j, 73+182j, -94+15j, -13-189j, 128+153j, -157-85j, 71+27j, -7+31j, 51-31j, -70+20j, 52+22j, -74-26j, 66-60j, -23+134j, -73-27j, 250-81j, -272-31j, 103+62j, 45+36j, -49-121j, 9+121j, 27-62j, -87-14j, 41+95j, 88-84j, -150+51j, 176-78j, -170+112j, 47-87j, 14+51j, 18-40j, -13+51j, 38-45j, -72-48j, 70+115j, -20-99j, -22+108j, 22-120j, -89+104j, 112-48j, -23-43j, -17+71j, -8-28j, 13-30j, 7+34j, 105-32j, -266+26j, 184+64j, -60-72j, 40-42j, 112+218j, -235-315j, 97+237j, -255-376j, 259+644j, 3307+2390j, ])\n",
    "\n",
    "out_rfft = np.array([\n",
    "\t-6016+0j, 2832+438j, 438-200j, -311+64j, 160-74j, -268+46j, 155-60j, 0+40j, -60+11j, 115+45j, -126-128j, 41+56j, 15-13j, -11+25j, -16+1j, 15-41j, -24+12j, 32+65j, -6-86j, -43+65j, 37-61j, -48+40j, 70-28j, -45-9j, -16+35j, 31-35j, -23+35j, 43-29j, -37+58j, -33-106j, 64+90j, -71-71j, 36+61j, 33-31j, -49-17j, 16+33j, 14-72j, -58+62j, 35-12j, 69+4j, -148-71j, 108+117j, -52-15j, 20-74j, 7+55j, -12-15j, -1-3j, -29-29j, 33+32j, 1-29j, 31+20j, -90-11j, 87-41j, -49+88j, -46-37j, 73-49j, -17+11j, -47+113j, 122-146j, -111+51j, -13-8j, 32+62j, 73-94j, -115-20j, -6+100j, 65-48j, -2+47j, -43-89j, 36+57j, -22-23j, -21+43j, -6-64j, 75+4j, -9+32j, -35+13j, -16-84j, -12+61j, 56+58j, 0-88j, -68-37j, 5+119j, 53-65j, -49-28j, -6+35j, 46-28j, 14+78j, -86-148j, 125+92j, -185-9j, 196+3j, -113-48j, 5+59j, 60-37j, -57+27j, -5+23j, 0-38j, 14-33j, -27+73j, 92-42j, -126-27j, 48+60j, 25-75j, -97+5j, 161+33j, -111-33j, 33+55j, 14-50j, -31-2j, -8+67j, 74-71j, -109+51j, 42-82j, 4+58j, -51-12j, 38+11j, 74-37j, -95+13j, -7+23j, 50+3j, -37-36j, -23-9j, 108+44j, -109-29j, 82+2j, -101+14j, 91-92j, -30+139j, -19-80j, -32-22j, 5+93j, 66-78j, -74+1j, 81-19j, -104+14j, 113+50j, -90-49j, 0-10j, 53+26j, -66+11j, 27-14j, 105-38j, -160+38j, 46-28j, 79-15j, -130+42j, 64+22j, -4-62j, 34+32j, -59-29j, 13+53j, -17-105j, 71+106j, -53-75j, -28+60j, 11-44j, 15+58j, 16-51j, -6+12j, 1-27j, -41+15j, 15+26j, 30-12j, -39-12j, 11+4j, 30+20j, -12-78j, -20+77j, -26-42j, 21+8j, -31+31j, 54-47j, 13+16j, -54+28j, 28-49j, -41+19j, 30+13j, 11-28j, -42+32j, 60-64j, -89+75j, 71-39j, -25+9j, 1-13j, 6+23j, -34+11j, 30-77j, 0+80j, -1-28j, 36-13j, -71-32j, -21+56j, 59-3j, -17-16j, -11-1j, 24-10j, -48-1j, 15+30j, 53-4j, -58+4j, -14-23j, 60-4j, -55+12j, 9+3j, 4-11j, -11+27j, 22-23j, -32+19j, 19+6j, -12-32j, -2-3j, 8+58j, 9-59j, -17+13j, -4+10j, 9+11j, -8-14j, 5+3j, -8+1j, 9-4j, -29-8j, 19+45j, 7-35j, -11-2j, -8+28j, 13-32j, -11+18j, 11-5j, -16-21j, 0+40j, 8-26j, -15+22j, 4-28j, -1+24j, 4-13j, -7+11j, -1-2j, -4-8j, 2+7j, -5+3j, 3+4j, -5-8j, -6+7j, 8-1j, -8+4j, -4+3j, 4-4j, -6+3j, 4+6j, -5-4j, -3-1j, 0+2j, -1+3j, -3+0j, -2+1j, 1+4j, -3+0j, 4+0j, ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f610293d100>]"
      ]
     },
     "execution_count": 180,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(np.abs(out_rfft[:]) * 2**(-15-Shift+int(np.log2(len(input_frame)//2))))\n",
    "plt.plot(np.abs(np.fft.rfft(out_preemph_c*2**(-15-Shift)))[:], \"--\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f6102a337f0>]"
      ]
     },
     "execution_count": 181,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(np.abs(out_rfft[-10:]) * 2**(-15-Shift+int(np.log2(len(input_frame)//2))))\n",
    "plt.plot(np.abs(np.fft.rfft(out_preemph_c*2**(-15-Shift)))[-10:], \"--\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "out_window_c_f32 = np.array([\n",
    "\t\t-0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -0.000001, -0.000001, -0.000001, -0.000002, -0.000003, -0.000003, -0.000004, -0.000005, -0.000005, -0.000005, -0.000006, -0.000010, -0.000011, -0.000010, -0.000010, -0.000014, -0.000017, -0.000017, -0.000022, -0.000016, -0.000020, -0.000034, -0.000025, -0.000011, -0.000024, -0.000039, -0.000031, -0.000031, -0.000030, -0.000029, -0.000048, -0.000056, -0.000046, -0.000037, -0.000047, -0.000065, -0.000063, -0.000045, -0.000050, -0.000072, -0.000075, -0.000079, -0.000059, -0.000030, -0.000062, -0.000074, -0.000086, -0.000113, -0.000076, -0.000081, -0.000104, -0.000106, -0.000113, -0.000071, -0.000109, -0.000157, -0.000129, -0.000108, -0.000122, -0.000173, -0.000155, -0.000077, -0.000106, -0.000216, -0.000177, -0.000086, -0.000061, -0.000063, -0.000133, -0.000183, -0.000156, -0.000149, -0.000188, -0.000204, -0.000201, -0.000186, -0.000196, -0.000191, -0.000167, -0.000226, -0.000228, -0.000222, -0.000232, -0.000215, -0.000176, -0.000236, -0.000286, -0.000161, -0.000262, -0.000240, -0.000177, -0.000265, -0.000252, -0.000338, -0.000369, -0.000279, -0.000122, -0.000191, -0.000419, -0.000289, -0.000297, -0.000293, -0.000165, -0.000281, -0.000389, -0.000416, -0.000259, -0.000146, -0.000314, -0.000449, -0.000354, -0.000423, -0.000460, -0.000295, -0.000335, -0.000408, -0.000390, -0.000339, -0.000353, -0.000544, -0.000531, -0.000461, -0.000591, -0.000560, -0.000473, -0.000327, -0.000519, -0.000607, -0.000457, -0.000410, -0.000332, -0.000618, -0.000585, -0.000403, -0.000298, -0.000302, -0.000526, -0.000518, -0.000475, -0.000659, -0.000759, -0.000464, -0.000383, -0.000588, -0.000709, -0.000742, -0.000470, -0.000179, -0.000413, -0.000792, -0.000865, -0.000584, -0.000413, -0.000790, -0.000531, -0.000217, -0.000460, -0.000653, -0.000843, -0.000675, -0.000474, -0.000451, -0.000536, -0.000676, -0.000586, -0.000660, -0.000912, -0.000744, -0.000611, -0.000918, -0.000856, -0.000589, -0.000849, -0.001023, -0.000866, -0.000530, -0.000467, -0.000618, -0.000685, -0.000665, -0.000654, -0.000901, -0.000793, -0.000682, -0.000771, -0.000630, -0.000561, -0.001084, -0.001457, -0.000904, -0.000766, -0.000783, -0.000632, -0.000996, -0.001226, -0.001074, -0.000429, -0.000763, -0.001217, -0.000892, -0.000709, -0.000779, -0.001312, -0.001258, -0.001028, -0.000816, -0.000534, -0.000829, -0.001208, -0.000889, -0.001274, -0.001539, -0.000898, -0.001163, -0.001362, -0.001360, -0.001323, -0.001333, -0.001624, -0.001107, -0.000682, -0.000687, -0.001119, -0.001141, -0.001047, -0.001324, -0.001088, -0.001147, -0.000959, -0.000793, -0.000853, -0.001073, -0.001877, -0.001564, -0.001041, -0.001461, -0.001638, -0.001271, -0.000971, -0.000977, -0.001568, -0.002008, -0.001415, -0.001628, -0.002179, -0.001340, -0.000444, -0.001506, -0.002040, -0.001328, -0.001306, -0.001560, -0.001553, -0.001408, -0.001012, -0.001315, -0.001622, -0.001552, -0.001802, -0.001170, -0.001661, -0.002270, -0.001779, -0.001181, -0.001336, -0.002225, -0.002437, -0.001729, -0.001332, -0.001731, -0.001911, -0.001664, -0.001224, -0.002203, -0.002389, -0.001226, -0.001497, -0.001982, -0.001549, -0.001593, -0.002069, -0.002205, -0.002179, -0.002192, -0.002240, -0.001679, -0.001835, -0.002813, -0.002920, -0.002049, -0.001549, -0.002337, -0.003150, -0.002704, -0.001811, -0.002575, -0.003557, -0.003047, -0.002747, -0.002898, -0.002812, -0.002328, -0.002818, -0.003874, -0.003770, -0.002795, -0.002278, -0.003289, -0.003591, -0.002926, -0.002709, -0.003178, -0.003463, -0.003352, -0.002483, -0.001838, -0.002333, -0.003301, -0.004084, -0.003028, -0.002135, -0.002099, -0.002868, -0.003753, -0.003590, -0.002834, -0.002493, -0.003034, -0.003135, -0.002454, -0.002128, -0.003081, -0.003497, -0.003465, -0.003227, -0.002738, -0.003754, -0.003169, -0.002328, -0.002845, -0.003784, -0.003726, -0.002196, -0.002862, -0.003482, -0.003422, -0.003221, -0.003019, -0.003290, -0.003396, -0.003742, -0.003177, -0.003092, -0.003320, -0.003573, -0.003462, -0.002445, -0.003581, -0.003419, -0.001851, -0.001856, -0.003103, -0.004131, -0.002821, -0.002228, -0.002837, -0.003323, -0.002374, -0.002430, -0.003809, -0.003158, -0.003216, -0.003303, -0.003851, -0.004375, -0.003458, -0.003234, -0.003320, -0.003380, -0.004225, -0.003842, -0.003172, -0.003994, -0.003371, -0.003036, -0.003519, -0.003792, -0.003269, -0.002826, -0.003179, -0.003802, -0.004697, -0.004007, -0.003289, -0.003242, -0.003925, -0.003852, -0.002230, -0.002425, -0.003059, -0.003860, -0.004579, -0.003435, -0.002974, -0.003919, -0.003235, -0.002493, -0.003498, -0.003336, -0.003204, -0.002903, -0.003049, -0.003922, -0.003678, -0.002109, -0.002564, -0.003980, -0.002855, -0.003426, -0.003518, -0.003154, -0.003159, -0.003135, -0.003512, -0.003203, -0.002778, -0.001979, -0.002758, -0.003166, -0.003112, -0.003002, -0.002949, -0.003127, -0.003391, -0.003134, -0.002645, -0.003259, -0.003264, -0.002977, -0.003331, -0.002371, -0.001582, -0.002611, -0.002555, -0.002528, -0.002327, -0.001887, -0.001682, -0.003398, -0.004051, -0.002605, -0.003200, -0.004123, -0.004870, -0.003299, -0.002440, -0.003127, -0.003816, -0.003820, -0.002599, -0.002363, -0.003501, -0.003504, -0.001979, -0.001920, -0.002132, -0.003275, -0.004090, -0.003461, -0.002380, -0.002380, -0.004102, -0.004044, -0.003412, -0.002991, -0.002147, -0.001905, -0.002815, -0.003512, -0.003211, -0.002909, -0.002699, -0.003640, -0.003126, -0.002611, -0.003129, -0.002705, -0.002068, -0.002464, -0.003377, -0.002862, -0.002710, -0.003411, -0.003716, -0.002712, -0.001828, -0.001799, -0.001494, -0.002654, -0.003813, -0.002806, -0.002318, -0.003662, -0.004150, -0.003204, -0.002655, -0.002930, -0.003174, -0.002930, -0.002502, -0.002533, -0.001923, -0.001983, -0.003050, -0.002532, -0.004331, -0.004360, -0.002622, -0.003169, -0.002285, -0.002589, -0.003289, -0.002557, -0.002283, -0.003012, -0.003102, -0.003133, -0.002918, -0.002552, -0.003006, -0.002428, -0.002487, -0.003002, -0.003273, -0.002272, -0.001968, -0.003601, -0.002450, -0.001361, -0.002628, -0.003955, -0.002716, -0.002443, -0.004007, -0.003072, -0.002920, -0.003458, -0.002493, -0.002823, -0.003360, -0.002758, -0.003235, -0.003621, -0.003051, -0.002928, -0.003014, -0.003310, -0.003455, -0.003809, -0.003864, -0.002227, -0.003233, -0.004386, -0.003552, -0.004672, -0.004255, -0.003187, -0.003567, -0.002886, -0.002999, -0.003231, -0.003403, -0.004687, -0.003834, -0.002455, -0.003736, -0.004342, -0.003288, -0.003983, -0.004237, -0.004029, -0.003822, -0.002862, -0.003118, -0.002651, -0.003453, -0.003993, -0.003356, -0.004038, -0.003317, -0.002912, -0.003363, -0.003188, -0.002642, -0.003149, -0.003539, -0.003110, -0.002766, -0.003381, -0.004105, -0.002499, -0.001793, -0.003161, -0.004103, -0.004709, -0.004365, -0.003470, -0.003213, -0.002212, -0.001821, -0.003552, -0.003984, -0.003838, -0.003942, -0.003141, -0.003161, -0.003127, -0.003337, -0.003113, -0.002918, -0.003127, -0.002985, -0.002952, -0.002892, -0.003634, -0.002746, -0.002153, -0.003209, -0.002963, -0.004092, -0.004267, -0.002943, -0.002726, -0.001829, -0.002086, -0.002652, -0.002335, -0.003027, -0.003639, -0.003629, -0.002439, -0.002381, -0.003140, -0.002929, -0.001854, -0.002582, -0.003309, -0.001813, -0.002009, -0.002153, -0.002521, -0.003359, -0.002830, -0.002005, -0.001826, -0.002927, -0.003998, -0.003081, -0.001951, -0.001750, -0.002205, -0.002850, -0.002310, -0.002327, -0.002870, -0.001812, -0.003138, -0.004002, -0.002950, -0.002682, -0.002768, -0.003645, -0.003050, -0.002345, -0.002359, -0.003043, -0.003054, -0.002312, -0.002738, -0.002454, -0.001993, -0.002346, -0.002542, -0.002285, -0.002030, -0.002334, -0.002702, -0.002537, -0.001428, -0.001839, -0.002575, -0.002238, -0.002012, -0.002135, -0.002212, -0.002245, -0.002513, -0.001782, -0.001712, -0.001746, -0.001802, -0.002399, -0.002534, -0.002089, -0.001587, -0.001170, -0.001675, -0.002136, -0.000891, -0.001149, -0.001887, -0.001359, -0.001353, -0.002080, -0.001735, -0.000922, -0.001387, -0.002002, -0.002439, -0.002177, -0.001803, -0.001393, -0.001159, -0.001417, -0.001598, -0.001348, -0.001658, -0.001928, -0.001052, -0.001212, -0.001516, -0.001507, -0.001320, -0.001007, -0.001253, -0.001264, -0.001628, -0.001567, -0.000893, -0.000732, -0.001249, -0.001535, -0.000892, -0.000870, -0.001374, -0.001096, -0.000806, -0.001269, -0.001411, -0.000874, -0.000771, -0.000963, -0.000875, -0.001290, -0.001459, -0.001642, -0.001758, -0.000945, -0.000751, -0.001043, -0.001315, -0.000877, -0.000382, -0.000638, -0.001328, -0.001575, -0.001222, -0.001215, -0.001222, -0.001448, -0.001599, -0.001415, -0.001606, -0.001496, -0.000722, -0.000929, -0.001425, -0.001305, -0.001627, -0.001219, -0.001074, -0.001472, -0.001140, -0.001066, -0.001468, -0.001300, -0.000873, -0.001282, -0.001388, -0.001340, -0.001432, -0.001069, -0.000937, -0.001165, -0.001291, -0.001282, -0.001249, -0.001118, -0.001026, -0.000770, -0.000728, -0.001224, -0.001250, -0.000804, -0.000695, -0.001242, -0.001748, -0.001090, -0.000871, -0.001159, -0.000792, -0.000688, -0.000790, -0.000825, -0.001018, -0.000884, -0.000959, -0.001114, -0.000800, -0.000955, -0.000976, -0.000721, -0.000636, -0.000727, -0.001144, -0.001000, -0.000792, -0.000851, -0.000797, -0.000808, -0.000664, -0.000658, -0.000740, -0.000760, -0.000953, -0.001014, -0.000832, -0.000611, -0.000681, -0.000733, -0.000594, -0.000849, -0.001179, -0.000792, -0.000506, -0.000728, -0.000729, -0.000567, -0.000539, -0.000676, -0.000765, -0.000507, -0.000487, -0.000783, -0.000689, -0.000731, -0.000827, -0.000598, -0.000455, -0.000457, -0.000577, -0.000669, -0.000739, -0.000756, -0.000570, -0.000607, -0.000599, -0.000562, -0.000525, -0.000572, -0.000717, -0.000569, -0.000436, -0.000668, -0.000659, -0.000585, -0.000588, -0.000602, -0.000668, -0.000549, -0.000532, -0.000448, -0.000452, -0.000614, -0.000571, -0.000395, -0.000441, -0.000374, -0.000332, -0.000436, -0.000421, -0.000415, -0.000365, -0.000283, -0.000316, -0.000398, -0.000294, -0.000274, -0.000364, -0.000409, -0.000406, -0.000264, -0.000171, -0.000277, -0.000373, -0.000244, -0.000201, -0.000266, -0.000235, -0.000244, -0.000301, -0.000295, -0.000215, -0.000202, -0.000202, -0.000207, -0.000220, -0.000230, -0.000173, -0.000205, -0.000236, -0.000142, -0.000180, -0.000139, -0.000094, -0.000182, -0.000202, -0.000228, -0.000175, -0.000131, -0.000205, -0.000187, -0.000104, -0.000112, -0.000183, -0.000182, -0.000102, -0.000085, -0.000123, -0.000136, -0.000132, -0.000102, -0.000088, -0.000073, -0.000071, -0.000065, -0.000051, -0.000053, -0.000076, -0.000130, -0.000111, -0.000066, -0.000041, -0.000059, -0.000128, -0.000124, -0.000058, 0.000000, -0.000018, -0.000087, -0.000081, -0.000061, -0.000055, -0.000040, -0.000052, -0.000066, -0.000069, -0.000056, -0.000043, -0.000032, -0.000030, -0.000042, -0.000047, -0.000023, -0.000030, -0.000049, -0.000027, -0.000013, -0.000030, -0.000036, -0.000007, -0.000013, -0.000029, -0.000024, -0.000022, -0.000022, -0.000021, -0.000013, -0.000012, -0.000023, -0.000015, -0.000009, -0.000015, -0.000011, -0.000013, -0.000013, -0.000010, -0.000009, -0.000008, -0.000005, -0.000004, -0.000006, -0.000005, -0.000003, -0.000004, -0.000004, -0.000003, -0.000001, -0.000001, -0.000002, -0.000002, -0.000001, -0.000001, -0.000001, -0.000000, -0.000000, -0.000000, -0.000000, -0.000000, ])\n",
    "\n",
    "out_swapped_fft_f32 = np.array([\n",
    "\t-0.824793-0.824867j, 0.391543+0.478543j, 0.017654-0.028644j, -0.026875-0.069452j, 0.006492+0.092296j, -0.004132-0.033142j, 0.003574-0.009892j, -0.005204-0.000275j, 0.008398+0.015573j, -0.011765-0.010668j, 0.013818-0.018507j, -0.010446+0.029454j, 0.012445-0.004922j, -0.010682-0.010215j, -0.000194+0.006616j, 0.006286-0.002330j, -0.001769-0.004179j, 0.000339+0.006580j, -0.010121-0.006072j, 0.021462+0.005531j, -0.016708+0.001582j, -0.000034-0.006060j, 0.003486+0.007704j, 0.006974-0.008025j, -0.011364-0.002564j, 0.005659+0.008763j, 0.003186-0.005590j, -0.008744+0.002503j, 0.006968+0.003658j, -0.001476-0.006439j, -0.003152+0.002077j, 0.005622+0.002403j, -0.002366-0.000228j, 0.002630-0.004761j, -0.004232+0.006871j, -0.002415-0.007012j, 0.004631+0.004322j, 0.001575-0.001104j, -0.010883-0.004713j, 0.010945+0.008681j, -0.000150-0.005571j, -0.003896+0.004696j, 0.003474-0.009492j, -0.005580+0.006652j, 0.001264+0.004028j, 0.001804-0.002840j, 0.006704-0.001823j, -0.012939-0.001998j, 0.014019+0.004014j, -0.011359-0.004038j, 0.002525+0.007779j, 0.004788-0.012423j, -0.005615+0.007447j, 0.004919+0.000919j, -0.008391-0.006006j, 0.011808+0.006995j, -0.006572-0.002462j, -0.001068+0.003724j, -0.001043-0.005094j, 0.002408+0.001166j, 0.004136-0.001863j, -0.007306+0.005786j, 0.001662-0.006288j, -0.000173+0.003040j, 0.011157+0.000784j, -0.015710-0.006121j, 0.009063+0.006180j, -0.008989-0.002353j, 0.007020+0.004926j, 0.001945-0.004176j, 0.000955+0.001002j, -0.010205-0.003793j, 0.013370+0.002449j, -0.012667+0.006420j, 0.008715-0.010589j, -0.001332+0.006840j, -0.005303-0.005076j, 0.003078+0.009319j, 0.001340-0.007979j, -0.002251-0.002054j, 0.007572+0.007220j, -0.012839-0.000628j, 0.011439-0.012038j, -0.007071+0.011543j, 0.007025-0.003533j, -0.009028+0.001512j, 0.002587+0.003289j, 0.002047-0.003663j, 0.003416+0.000077j, -0.008271+0.004540j, 0.011276-0.010198j, -0.009347+0.010931j, 0.004542-0.006220j, -0.004198-0.001881j, 0.001303+0.003350j, 0.002004-0.004740j, 0.003075+0.006652j, -0.007348-0.003452j, 0.009022-0.001092j, -0.010830+0.003160j, 0.006858+0.001286j, -0.008445-0.003530j, 0.013266+0.005211j, -0.007136-0.009433j, -0.001402+0.010178j, 0.005190-0.002404j, -0.004312-0.009417j, -0.000102+0.008173j, 0.002776-0.003983j, -0.004697+0.008284j, 0.003181-0.005768j, 0.005240+0.002507j, -0.007907-0.003288j, 0.000407+0.003940j, 0.005147-0.009476j, -0.001719+0.011860j, -0.004554-0.014469j, 0.009265+0.013943j, -0.012129-0.006332j, 0.009108+0.004413j, -0.005894+0.002071j, 0.007266-0.011132j, -0.003517+0.007349j, -0.006754+0.000026j, 0.008261-0.005069j, -0.000583+0.006162j, -0.007273-0.003789j, 0.010713+0.003541j, -0.006493+0.000366j, 0.000370-0.004123j, 0.004377-0.001786j, -0.005065+0.012288j, 0.001497-0.010295j, 0.010345+0.000046j, -0.024602-0.002621j, 0.023812+0.010527j, -0.011659-0.010876j, 0.001665+0.003558j, -0.000901+0.003991j, 0.000744-0.007843j, 0.002689+0.004432j, 0.002984+0.003340j, -0.014160+0.001332j, 0.013937-0.003425j, -0.011573-0.005733j, 0.010234+0.006492j, -0.004493-0.003889j, 0.001370+0.005362j, 0.002391-0.000952j, 0.003432-0.003525j, -0.008860-0.001373j, 0.002747+0.003320j, -0.005918-0.003454j, 0.013561+0.002270j, -0.008010+0.005021j, -0.006723-0.003135j, 0.010498-0.004682j, -0.000384+0.009382j, -0.001071-0.008701j, -0.004141-0.002419j, 0.003867+0.011318j, -0.003478-0.013038j, 0.002073+0.007998j, 0.000548+0.000327j, -0.004239-0.000633j, 0.011604-0.002373j, -0.012787+0.001038j, 0.002528+0.004108j, -0.000618-0.002189j, 0.008446-0.003051j, -0.005205-0.000363j, 0.001770-0.006075j, -0.005469+0.022631j, 0.002594-0.022147j, -0.003445+0.012589j, 0.006347-0.008553j, -0.002054+0.008642j, -0.003108-0.002025j, 0.005144-0.009081j, -0.001752+0.002934j, 0.005619+0.009518j, -0.011787-0.008749j, 0.010692-0.003999j, -0.009435+0.013225j, 0.005406-0.013688j, -0.006127+0.014172j, 0.011231-0.007037j, -0.007444-0.003105j, 0.004884+0.004037j, -0.014086-0.000794j, 0.016767+0.004136j, -0.004738-0.004739j, -0.002394-0.003496j, 0.006613+0.005706j, -0.011860-0.005142j, 0.009032-0.001146j, -0.006255+0.008431j, 0.003744-0.007742j, -0.000953+0.006843j, 0.009000-0.009138j, -0.014887+0.008024j, 0.003567-0.002992j, 0.013694+0.005719j, -0.013449-0.009908j, 0.003485+0.007886j, -0.009551-0.002475j, 0.021329+0.001343j, -0.018883-0.006521j, 0.005779+0.001451j, 0.002437+0.003411j, -0.003768+0.008851j, -0.004434-0.003282j, 0.014081-0.011179j, -0.009797-0.001744j, -0.000898+0.011789j, -0.001945-0.012361j, 0.007929+0.016796j, -0.005688-0.006037j, 0.007070-0.001913j, -0.007579-0.006366j, 0.007651+0.007016j, -0.006355-0.000769j, 0.000900-0.003743j, 0.014780+0.007240j, -0.028414-0.007667j, 0.013665+0.000814j, 0.001527+0.003496j, 0.004237-0.001968j, -0.003961+0.002789j, 0.003895+0.003281j, -0.022700-0.008045j, 0.039194+0.001628j, -0.027175-0.005143j, 0.000442+0.009492j, 0.009207+0.009753j, 0.000306-0.020600j, -0.012035+0.000753j, 0.004663+0.013599j, 0.012623+0.003617j, -0.008663-0.018170j, -0.000120+0.006630j, -0.008877-0.004647j, 0.009941+0.003396j, 0.004849+0.004946j, -0.018973+0.001071j, 0.017054-0.003647j, 0.003134+0.000643j, -0.020288+0.000297j, 0.017121+0.003731j, -0.002267-0.014817j, -0.003794+0.013972j, -0.004691-0.000754j, 0.018786-0.008001j, -0.012347+0.011201j, -0.006200-0.015477j, 0.010968+0.018773j, -0.001098-0.011988j, -0.005049-0.000640j, 0.000595+0.012913j, -0.002547-0.010684j, -0.000579-0.010062j, 0.004318+0.006935j, -0.001200+0.018160j, 0.004938-0.015304j, -0.014311+0.002447j, 0.030010-0.006386j, -0.037230-0.005725j, 0.010305+0.031591j, 0.017220-0.026292j, -0.001821+0.000587j, -0.011302+0.013552j, 0.005923-0.011241j, -0.003459+0.003902j, 0.004653-0.005164j, -0.012310-0.009399j, 0.000776+0.027995j, 0.015287-0.010662j, -0.003545-0.017708j, -0.013599+0.022624j, 0.017215-0.014910j, -0.006647+0.012695j, -0.014168-0.012004j, 0.009919+0.013381j, 0.013576-0.003379j, -0.015543-0.015114j, 0.016401+0.018514j, -0.015149-0.019264j, 0.001344+0.014934j, -0.004332-0.008571j, 0.013128+0.006985j, -0.009849-0.003328j, 0.005911+0.016065j, -0.008407-0.027089j, 0.004099+0.012675j, 0.005456+0.005918j, -0.010962-0.012709j, 0.009082+0.005440j, -0.010416+0.005369j, 0.017447+0.002487j, -0.002271-0.015359j, -0.017875+0.011945j, 0.022962-0.006530j, -0.016517+0.008397j, 0.007698+0.000202j, 0.005977-0.013301j, 0.002324+0.009484j, -0.035400-0.005106j, 0.026437+0.010126j, 0.002603-0.011896j, -0.013669+0.009632j, 0.010783-0.012420j, 0.002060+0.015976j, -0.006291-0.019607j, -0.004034+0.013463j, 0.023981+0.010936j, -0.026145-0.027656j, 0.009709+0.012743j, -0.006223+0.010427j, 0.007636-0.013512j, -0.008768+0.004081j, 0.009431+0.004110j, -0.003768+0.000957j, 0.006714-0.007274j, -0.022311+0.009031j, 0.030416+0.000808j, -0.019892-0.017572j, 0.000428+0.010884j, 0.009229-0.005764j, -0.009408+0.010180j, 0.004601+0.000696j, 0.012202-0.008726j, -0.016191+0.007492j, 0.007341-0.009037j, 0.011064+0.005127j, -0.025565+0.004159j, 0.008192-0.012759j, 0.005377+0.004717j, -0.001241+0.012942j, -0.005541-0.001822j, -0.001222-0.007381j, 0.016129-0.007218j, -0.011208+0.016573j, 0.003934-0.013717j, -0.011862+0.008746j, 0.012645-0.010177j, -0.003407+0.010433j, 0.005349-0.007221j, -0.009233-0.008128j, 0.003758+0.020546j, -0.000483-0.013973j, 0.004745+0.002296j, -0.011472+0.014426j, 0.010336-0.018827j, 0.005322+0.008439j, -0.015928-0.001662j, 0.013562-0.004334j, -0.014828+0.010744j, 0.005937-0.015835j, 0.007563+0.020347j, -0.008150-0.017717j, 0.007855+0.005723j, -0.003627+0.007310j, -0.004178-0.010329j, 0.004576+0.001619j, -0.006512-0.001601j, 0.013095+0.009368j, -0.009275-0.008875j, 0.007156+0.015439j, -0.006049-0.016480j, -0.003748-0.001153j, -0.006205+0.004446j, 0.017261+0.012704j, -0.000569-0.013526j, -0.006851-0.004490j, 0.003792+0.009470j, -0.003036-0.010695j, -0.014071+0.013186j, 0.018431-0.005634j, 0.009944+0.002161j, -0.022759-0.008494j, 0.004872+0.006496j, -0.001663+0.005980j, 0.012129-0.012005j, -0.008343+0.015284j, -0.006015-0.022636j, 0.015800+0.029103j, -0.017023-0.020873j, 0.021287+0.001215j, -0.019201+0.005146j, 0.002729-0.001452j, 0.010895+0.005494j, -0.008096-0.007846j, 0.002984-0.001117j, -0.011024+0.006088j, 0.013948-0.009545j, 0.003640+0.018988j, -0.023695-0.017869j, 0.018832+0.003062j, -0.001079+0.004318j, -0.002984-0.001546j, 0.004364+0.000091j, -0.014334+0.003279j, 0.006103-0.001218j, 0.011646-0.004771j, -0.009334-0.001660j, 0.011009+0.008442j, -0.011203-0.006174j, -0.005879+0.005478j, 0.012740-0.011153j, -0.009801+0.005479j, 0.006787+0.015027j, -0.003741-0.016001j, 0.008206+0.005655j, -0.008799-0.009639j, 0.004122+0.010333j, -0.005483-0.003883j, 0.008471+0.003508j, -0.002604-0.005052j, -0.002636+0.006027j, -0.000736-0.009124j, 0.001496+0.011979j, -0.000624-0.009725j, -0.003498+0.006031j, 0.007383-0.008359j, -0.006490+0.007836j, 0.007794-0.000096j, -0.011034+0.000928j, 0.010163-0.010020j, -0.009650+0.008844j, 0.013428-0.007804j, -0.008537+0.020330j, -0.003565-0.024937j, 0.011276+0.011756j, -0.005560+0.001718j, -0.003599-0.007613j, -0.000206+0.007264j, 0.002007-0.001575j, 0.003889-0.007882j, -0.009070+0.014943j, 0.006687-0.011294j, -0.001652+0.001001j, 0.002442+0.006193j, -0.000793-0.006872j, -0.002988-0.000299j, 0.002152+0.009720j, -0.005134-0.009430j, 0.016394+0.007914j, -0.018100-0.010503j, 0.010965+0.007081j, -0.002081-0.007580j, -0.011028+0.015085j, 0.013904-0.015634j, -0.008801+0.004777j, 0.009733+0.010370j, -0.014440-0.008974j, 0.013410-0.002145j, -0.010054+0.000432j, 0.012000+0.006683j, -0.008227-0.008303j, 0.002420+0.003831j, 0.000526-0.000920j, -0.003489+0.001801j, 0.003754+0.000140j, -0.001349-0.006373j, 0.000626+0.011596j, 0.000420-0.014914j, -0.003844+0.007919j, -0.006333+0.005174j, 0.008987-0.000218j, 0.007805-0.007650j, -0.011138+0.005273j, 0.004175-0.007726j, -0.005703+0.005753j, 0.010832+0.007807j, -0.008238-0.011468j, 0.000193+0.001764j, 0.004947+0.006567j, -0.006654-0.002018j, 0.007214-0.009491j, -0.006291+0.007727j, 0.000084-0.004186j, 0.003382+0.005519j, 0.001844-0.002652j, -0.008763-0.001804j, 0.006569+0.007273j, 0.002085-0.009466j, -0.007643+0.004397j, 0.011285+0.006292j, -0.003123-0.012756j, -0.009443+0.006226j, 0.009373+0.004837j, -0.007344+0.000093j, 0.001274-0.018347j, 0.008209+0.023484j, -0.008607-0.010654j, 0.006959-0.000812j, -0.003490-0.000952j, -0.003191+0.006245j, 0.007618-0.000032j, -0.011004-0.011292j, -0.005802+0.013257j, 0.031965-0.010917j, -0.019897+0.014403j, -0.011023-0.012579j, 0.016174+0.008874j, -0.000444-0.005187j, -0.009967+0.003642j, -0.034680-0.004211j, 0.095094+0.006342j, -0.070851-0.027156j, -0.029011+0.017951j, 0.481375+0.393853j, ])\n",
    "\n",
    "out_rfft_f32 = np.array([\n",
    "\t-1.649659+0.000074j, 0.872925+0.084584j, -0.011311-0.046562j, -0.097564-0.042243j, 0.101184+0.086055j, -0.038543-0.029160j, -0.006568-0.013418j, -0.005450+0.004951j, 0.024686+0.006633j, -0.022979+0.001968j, -0.006121-0.033155j, 0.021437+0.040718j, 0.006806-0.018495j, -0.021576+0.001235j, 0.007327+0.006933j, 0.003061-0.009186j, -0.005267-0.002218j, 0.006862+0.006688j, -0.017593+0.003965j, 0.028474-0.017245j, -0.014936+0.019913j, -0.007117-0.006318j, 0.013039+0.003506j, -0.003280-0.015126j, -0.014216+0.010296j, 0.016341+0.002865j, -0.003677-0.010245j, -0.005871+0.011900j, 0.012119-0.002938j, -0.009821-0.005174j, -0.000479+0.004872j, 0.008180-0.003407j, -0.003066+0.003611j, -0.001275-0.010912j, 0.001395+0.014051j, -0.009397-0.003605j, 0.010135-0.002161j, 0.001049-0.002182j, -0.017127+0.006533j, 0.018884-0.001572j, -0.003513-0.008378j, -0.000323+0.010496j, -0.007734-0.013909j, 0.002377+0.013742j, 0.007992+0.005336j, -0.002251-0.008239j, 0.002889-0.010785j, -0.012467+0.015266j, 0.012848-0.012465j, -0.009844+0.007490j, 0.007099+0.003210j, -0.005677-0.009415j, 0.001517+0.006075j, 0.005521-0.003398j, -0.015048+0.003554j, 0.018389-0.002018j, -0.009855-0.002745j, 0.009394+0.009464j, -0.016669-0.001888j, 0.012762-0.003219j, -0.003301-0.009879j, 0.002593+0.022381j, -0.002955-0.018211j, -0.003589+0.005282j, 0.014658-0.004742j, -0.025029+0.004318j, 0.020650-0.000274j, -0.011692+0.007660j, 0.010295-0.007590j, -0.003575-0.003267j, -0.002952+0.004364j, -0.000125+0.000234j, 0.004207-0.006803j, -0.000995+0.018635j, -0.002121-0.021712j, 0.001971+0.009932j, -0.002975+0.003009j, 0.008072-0.004208j, -0.009187+0.001215j, -0.004826-0.003272j, 0.018665-0.005107j, -0.017227+0.022325j, 0.000267-0.026933j, 0.009808+0.017711j, -0.003111-0.014752j, 0.001659+0.016205j, -0.005832-0.005765j, 0.004765+0.001647j, -0.000690-0.010162j, 0.001989+0.014130j, -0.001760-0.013311j, -0.002163+0.013708j, 0.004637-0.011927j, -0.006163+0.008051j, 0.002189-0.005546j, -0.005656+0.000928j, 0.011496+0.000993j, -0.008930+0.003044j, 0.008996-0.010346j, -0.011895+0.009082j, 0.010757-0.003632j, -0.012676+0.013822j, 0.016330-0.013461j, -0.010851-0.007363j, 0.009490+0.016636j, -0.002440-0.009289j, -0.016048+0.000357j, 0.015425-0.000805j, -0.009229-0.004199j, 0.009919+0.011850j, 0.002828+0.001048j, -0.008462-0.009811j, 0.000885+0.004068j, -0.001452+0.000674j, -0.001943-0.007619j, 0.020900+0.007382j, -0.032619+0.005014j, 0.017003-0.015472j, 0.003600+0.016632j, -0.003760-0.011839j, 0.001879+0.004563j, -0.012600-0.000887j, 0.013298+0.001836j, 0.000716+0.004681j, -0.014910-0.015079j, 0.020596+0.007787j, -0.024378+0.013665j, 0.026655-0.022442j, -0.013959+0.019544j, -0.003165-0.016735j, 0.006212+0.012752j, 0.004199-0.002242j, 0.003097-0.005856j, -0.021158-0.003993j, 0.005169+0.009534j, 0.020793+0.004459j, -0.012982-0.013697j, -0.004817+0.008217j, 0.007662-0.006227j, -0.009970+0.000470j, -0.003143+0.011358j, 0.020758-0.006159j, -0.005279-0.001207j, -0.003169-0.005027j, -0.013722+0.015711j, 0.014404-0.013962j, -0.012739+0.005982j, 0.016398-0.004146j, -0.006356-0.001408j, 0.003876-0.001468j, -0.008199+0.010552j, 0.000204-0.008159j, 0.007176-0.001397j, -0.010616+0.009812j, 0.013517-0.013382j, -0.000749+0.017747j, -0.010773-0.017483j, 0.013755+0.008766j, -0.017557-0.003450j, 0.006196-0.005268j, 0.007705+0.019991j, -0.010430-0.016512j, 0.007336-0.000735j, -0.004086+0.012613j, 0.008464-0.016862j, -0.010433+0.001811j, 0.002380+0.011518j, 0.000801-0.010917j, 0.008523+0.012707j, -0.009000-0.013517j, -0.000232+0.015060j, -0.007730-0.019108j, 0.018524+0.013542j, -0.008178+0.004577j, -0.002815+0.001984j, 0.000264-0.014486j, 0.008087-0.002177j, 0.004097+0.014540j, -0.024973-0.011507j, 0.012196-0.001769j, 0.007358+0.009450j, -0.016241-0.008535j, 0.009335+0.008413j, 0.006923+0.003030j, -0.009447-0.013515j, 0.010286+0.009397j, 0.001720-0.012959j, -0.023590+0.014102j, 0.030302+0.004573j, -0.020322-0.010331j, 0.006502+0.005167j, -0.004540-0.000917j, 0.009098-0.001824j, -0.006355-0.006620j, 0.003476+0.016465j, -0.003998-0.012894j, 0.012984-0.009161j, -0.031444+0.021216j, 0.026298-0.006036j, -0.002899-0.015565j, -0.008493+0.020717j, 0.004252-0.015860j, 0.009772+0.011765j, -0.013707-0.009674j, 0.001996+0.011657j, 0.026741-0.004401j, -0.034643-0.003548j, 0.002287-0.006277j, 0.004253+0.013075j, 0.008103+0.000620j, -0.013862-0.009831j, 0.021106+0.010078j, -0.017194-0.016192j, -0.004631+0.016045j, 0.018963+0.000086j, -0.011153-0.006533j, 0.011766-0.004967j, -0.013109+0.011817j, 0.005941-0.006050j, 0.004659-0.011280j, -0.010411+0.025086j, 0.007400-0.014582j, -0.010465+0.002138j, 0.014576-0.007006j, -0.006147+0.010764j, 0.002944-0.015957j, -0.016451+0.017605j, 0.017769-0.017307j, -0.016511+0.014033j, 0.013502+0.004177j, 0.010136-0.010756j, -0.014647+0.007866j, -0.006204-0.011148j, 0.016751+0.016063j, -0.011317-0.024012j, -0.005990+0.017302j, 0.014578+0.012297j, 0.003209-0.028080j, -0.012552+0.008007j, 0.003402+0.005794j, -0.002935-0.004040j, 0.005161+0.011888j, -0.010535-0.014432j, -0.001590-0.000844j, 0.016243+0.027589j, 0.011255-0.031787j, -0.037348+0.004482j, 0.029803+0.007769j, -0.014140-0.003215j, 0.004288+0.015445j, -0.000610-0.018101j, 0.004411-0.006796j, -0.000798+0.009822j, -0.002543+0.010774j, 0.000579-0.012872j, -0.004993+0.000591j, -0.001098+0.011988j, 0.010912-0.018822j, -0.006184+0.015519j, -0.012351-0.011111j, 0.019004+0.007761j, -0.004784+0.000894j, -0.004384-0.013913j, -0.001617+0.014958j, 0.016951-0.004498j, -0.020082+0.001086j, 0.003252-0.001885j, 0.016104+0.003451j, -0.017997+0.000226j, 0.004618-0.005203j, 0.009175-0.004276j, -0.008115+0.005293j, -0.000644-0.006768j, -0.007412+0.018799j, 0.012866-0.005009j, 0.002230-0.013684j, -0.011326+0.000882j, 0.002752+0.020194j, 0.006924-0.011141j, 0.000906-0.008339j, -0.027618+0.006690j, 0.039674-0.005766j, -0.022917+0.010670j, 0.003969-0.002484j, -0.002992-0.003870j, 0.002869+0.003176j, 0.002829-0.005155j, 0.012065-0.001837j, -0.026599+0.009860j, 0.013333-0.007261j, 0.001516+0.002553j, -0.007844+0.002252j, 0.009655-0.009019j, -0.008140+0.007761j, 0.006585+0.001780j, -0.003541+0.005145j, 0.005245-0.016322j, -0.001208+0.011196j, -0.002415-0.009216j, -0.007437+0.002430j, 0.013401+0.006931j, -0.002578+0.006830j, -0.006423-0.010285j, 0.002032-0.002589j, 0.007503-0.001677j, -0.018846+0.009728j, 0.020573-0.009997j, -0.009855+0.008200j, 0.004092-0.008126j, -0.013411+0.009866j, 0.014704-0.006375j, 0.001375+0.003109j, -0.012684-0.006914j, 0.007864+0.007035j, -0.003269-0.001942j, 0.009044+0.001302j, -0.009531-0.004849j, 0.006808-0.001322j, -0.007700+0.008095j, 0.004200-0.008245j, -0.002061+0.005782j, -0.003966+0.004779j, 0.016979-0.006243j, -0.016074-0.000506j, 0.004998+0.001344j, -0.003746-0.000365j, 0.009940+0.004962j, -0.007184-0.010539j, 0.005445+0.010353j, -0.011757-0.009499j, 0.013559+0.003685j, -0.011737+0.007706j, 0.005602-0.009105j, -0.002885+0.000424j, 0.004552+0.001734j, 0.000987+0.003806j, -0.004764-0.006102j, 0.004841+0.007010j, -0.006171-0.012427j, 0.009550+0.019343j, -0.007865-0.016307j, -0.001708+0.003540j, -0.001038+0.001707j, 0.005585-0.001719j, 0.003504+0.004718j, -0.001680-0.004592j, -0.009818+0.003259j, 0.012803-0.003944j, -0.008946+0.004317j, 0.004152-0.001687j, -0.000518-0.006437j, -0.004520+0.010953j, 0.006498-0.010153j, -0.005015+0.005589j, 0.000557+0.003589j, -0.000577-0.004950j, 0.006442-0.002057j, -0.000037+0.005048j, -0.013964+0.001945j, 0.016027-0.010175j, -0.005238+0.007780j, -0.001085-0.004168j, -0.004839+0.001596j, 0.004133+0.003676j, 0.002234-0.002056j, -0.001934-0.000140j, -0.001029+0.000996j, 0.002986-0.005015j, -0.003900+0.004965j, 0.013358-0.002755j, -0.015086+0.001908j, -0.000514+0.003205j, 0.005263-0.006600j, 0.003863+0.003824j, -0.004771-0.000748j, 0.003446-0.006035j, -0.012747+0.010365j, 0.021450-0.011702j, -0.019827+0.014316j, 0.008744-0.012532j, 0.003272+0.010935j, -0.010928-0.008550j, 0.010294+0.002533j, -0.004809+0.002672j, 0.001450-0.003458j, -0.000143+0.003120j, 0.000082-0.003420j, 0.000108+0.002840j, 0.003970-0.004863j, -0.004741+0.003204j, -0.005921-0.000018j, 0.011769+0.002399j, -0.004789+0.001375j, 0.001844-0.010164j, -0.001781+0.013419j, -0.004099-0.010427j, 0.004370+0.001614j, -0.003786-0.001416j, 0.006011+0.006175j, -0.001125-0.004812j, -0.004428+0.007446j, -0.000632-0.009039j, 0.006457+0.005599j, -0.002970-0.001205j, 0.002670-0.001876j, -0.004518-0.000536j, 0.000533+0.003599j, 0.001751-0.001407j, 0.001848-0.004696j, -0.006086+0.007549j, 0.003723-0.003645j, 0.000491+0.001351j, 0.004307+0.000737j, -0.007734-0.003716j, 0.004148+0.001079j, -0.003902+0.002613j, 0.000050-0.002151j, 0.005055+0.000615j, -0.003522-0.002869j, 0.001229+0.000807j, 0.001401+0.006273j, -0.007807-0.006949j, 0.009538+0.002918j, -0.002877+0.001230j, -0.002385-0.002403j, 0.005077+0.005213j, -0.002616-0.008126j, -0.000525+0.004673j, 0.000486-0.002375j, -0.003451-0.001636j, 0.002635+0.005434j, 0.000823-0.001984j, 0.000184-0.000571j, -0.002986+0.000500j, 0.006928+0.001581j, -0.005200-0.006263j, -0.000321+0.006510j, 0.000586-0.004790j, 0.001766+0.003820j, -0.004984+0.000921j, 0.007511-0.008251j, -0.007638+0.010219j, 0.003114-0.003509j, 0.002532+0.000609j, -0.001122-0.002795j, -0.002431+0.000583j, 0.004807+0.001459j, -0.008782-0.000064j, 0.007464+0.001555j, 0.001335-0.005338j, -0.006411+0.003162j, 0.004004+0.000961j, -0.001364-0.003240j, -0.000621+0.005984j, 0.001186-0.005769j, 0.002949+0.003596j, -0.006771+0.000149j, 0.005419-0.002330j, -0.001570+0.001257j, 0.001818-0.000487j, -0.006606-0.002291j, 0.006976+0.004810j, -0.000821-0.004430j, -0.002864+0.005154j, 0.001797-0.004882j, -0.000053+0.002351j, -0.000028-0.001043j, -0.002278-0.000225j, 0.002260+0.001090j, -0.000151-0.000560j, 0.000069+0.000856j, 0.000602-0.001925j, -0.002340+0.002947j, 0.002892-0.002445j, -0.001994-0.000222j, 0.000718+0.000686j, -0.000558+0.000084j, 0.000328+0.001389j, 0.001587-0.002311j, -0.002386+0.001576j, 0.000784-0.000347j, 0.000825-0.000291j, -0.000828+0.000144j, -0.000418-0.000538j, 0.001418+0.000676j, -0.000789-0.000070j, -0.000780-0.000257j, 0.000603+0.000395j, -0.000271+0.000104j, 0.000811-0.000875j, -0.000181+0.000639j, -0.000261-0.000165j, -0.000498-0.000015j, 0.001198+0.000708j, -0.001135-0.000616j, 0.000436-0.000705j, 0.000009+0.001009j, 0.000033-0.000611j, 0.000097+0.000286j, -0.000111+0.000158j, -0.000164-0.000316j, 0.000082+0.000347j, 0.000042-0.000245j, 0.000191+0.000056j, -0.000113-0.000066j, -0.000198+0.000039j, 0.000176+0.000116j, -0.000270-0.000229j, 0.000402+0.000100j, -0.000162+0.000052j, -0.000046+0.000032j, -0.000006-0.000106j, ])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "72 0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(win_frame)\n",
    "plt.plot(out_window_c_f32)\n",
    "plt.plot(out_window_c * 2**(-15-Shift))\n",
    "print(qsnr(out_window_c_f32, win_frame), qsnr(win_frame, out_window_c * 2**(-15-Shift)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "79\n"
     ]
    },
    {
     "ename": "ValueError",
     "evalue": "operands could not be broadcast together with shapes (512,) (513,) ",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-9-a91c2bac457f>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mout_rfft\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m8\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mShift\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"--\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mqsnr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfft\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrfft\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwin_frame\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mout_rfft_f32\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mqsnr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mout_rfft_f32\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mout_rfft\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m8\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mShift\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m<ipython-input-1-65a16f786d5f>\u001b[0m in \u001b[0;36mqsnr\u001b[0;34m(orig, quant)\u001b[0m\n\u001b[1;32m      7\u001b[0m     \"\"\"Calculate the QSNR between two tensors\n\u001b[1;32m      8\u001b[0m     \"\"\"\n\u001b[0;32m----> 9\u001b[0;31m     \u001b[0mqerr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0morig\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mquant\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     10\u001b[0m     \u001b[0msum_err\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mqerr\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mqerr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     11\u001b[0m     \u001b[0msum_orig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0morig\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0morig\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mValueError\u001b[0m: operands could not be broadcast together with shapes (512,) (513,) "
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(np.abs(np.fft.rfft(win_frame)))\n",
    "plt.plot(np.abs(out_rfft_f32))\n",
    "plt.plot(np.abs(out_rfft * 2**(-8-Shift)), \"--\")\n",
    "print(qsnr(np.abs(np.fft.rfft(win_frame))[:-1], np.abs(out_rfft_f32)))\n",
    "print(qsnr(np.abs(out_rfft_f32), np.abs(out_rfft * 2**(-8-Shift))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-1.00580017e-04+0.00000000e+00j,  4.89633179e-05-4.20074463e-06j,\n",
       "        2.98370361e-06+5.59497070e-06j, -6.31817627e-06-9.74548340e-07j,\n",
       "        6.87420654e-06-2.08764648e-06j, -1.67877197e-06+1.01568604e-06j,\n",
       "       -1.20428467e-06-4.30114746e-07j,  1.54754639e-06+1.40142822e-06j,\n",
       "       -7.82470703e-07-1.08300781e-06j, -6.16455078e-08-3.39477539e-07j,\n",
       "       -3.85681152e-07+1.32458496e-06j, -3.12194824e-07-2.16192627e-06j,\n",
       "        1.20776367e-06+1.82653809e-06j, -6.89575195e-07-9.86938477e-08j,\n",
       "        1.01623535e-07-7.13867187e-07j,  5.89843750e-07+6.58630371e-07j,\n",
       "       -3.56445312e-07-5.34362793e-07j, -6.28051758e-08-3.31176758e-07j,\n",
       "       -1.10351562e-06+1.55517578e-07j,  1.26788330e-06+2.10693359e-07j,\n",
       "       -4.15039062e-09+1.23352051e-07j, -6.96716309e-07-2.25402832e-07j,\n",
       "        1.02624512e-06+6.64184570e-07j, -1.06481934e-06-2.70507813e-07j,\n",
       "        8.29223633e-07-1.05242920e-06j, -5.69885254e-07+1.18273926e-06j,\n",
       "       -2.24487305e-07-7.50732422e-08j,  4.28466797e-07-5.09094238e-07j,\n",
       "        4.82604980e-07+8.40759277e-07j, -4.93347168e-07-8.58886719e-07j,\n",
       "       -1.56982422e-07-5.00488281e-08j,  4.03564453e-07+7.08984375e-07j,\n",
       "       -7.25708008e-08-9.76440430e-07j, -5.40222168e-07+9.67895508e-07j,\n",
       "        2.40844727e-07-3.50585937e-07j,  1.23779297e-07+4.06127930e-07j,\n",
       "        3.76403809e-07-7.06115723e-07j, -6.71386719e-09-2.03674316e-07j,\n",
       "       -1.41827393e-06+6.91040039e-07j,  1.00622559e-06-3.28369141e-07j,\n",
       "        6.01013184e-07+6.25915527e-07j, -1.60888672e-07-1.00854492e-06j,\n",
       "       -1.05853271e-06+6.03454590e-07j,  3.61816406e-07-6.27197266e-07j,\n",
       "        3.26354980e-07+1.84777832e-06j,  7.05749512e-07-2.02569580e-06j,\n",
       "       -8.17565918e-07+1.12268066e-06j, -3.99780273e-08-9.04907227e-07j,\n",
       "       -3.83544922e-07-4.26635742e-08j,  6.49597168e-07+1.05072021e-06j,\n",
       "        7.60498047e-08-2.54516602e-07j, -4.64416504e-07-5.78613281e-07j,\n",
       "        5.10864258e-07+5.22399902e-07j,  2.44445801e-07-3.96606445e-07j,\n",
       "       -1.26324463e-06+1.70227051e-07j,  6.51000977e-07-2.85034180e-08j,\n",
       "        5.02807617e-07-8.74633789e-08j, -3.45336914e-07+1.86035156e-07j,\n",
       "        2.14477539e-07+1.00891113e-07j, -6.98486328e-07-3.18786621e-07j,\n",
       "        3.08654785e-07-1.92260742e-07j,  5.27770996e-07+4.43603516e-07j,\n",
       "       -5.25695801e-07+2.55249023e-07j,  4.33959961e-08-5.95947266e-07j,\n",
       "       -4.53491211e-07-2.60559082e-07j,  1.23284912e-06+1.06109619e-06j,\n",
       "       -7.73315430e-07-5.54321289e-07j,  3.12438965e-07+3.57238770e-07j,\n",
       "       -5.41687012e-07-1.03674316e-06j,  2.31506348e-07+7.43835449e-07j,\n",
       "       -2.80578613e-07+1.00158691e-07j,  5.85632324e-07+6.61010742e-08j,\n",
       "        2.21130371e-07-3.31665039e-07j, -3.88732910e-07+1.67907715e-07j,\n",
       "       -8.92333984e-07-2.31811523e-07j,  8.94226074e-07+6.90673828e-07j,\n",
       "        5.47546387e-07-2.17285156e-07j, -3.15002441e-07-1.42639160e-06j,\n",
       "       -7.90161133e-07+8.23791504e-07j, -4.57275391e-07+3.33190918e-07j,\n",
       "        4.43725586e-07+7.19604492e-07j,  1.69787598e-06-2.59094238e-07j,\n",
       "       -3.47900391e-08-1.41864014e-06j, -1.40991211e-06+4.14428711e-08j,\n",
       "       -1.02593994e-06+1.28192139e-06j,  8.40026855e-07+4.41284180e-07j,\n",
       "        1.20281982e-06-2.75207520e-07j, -2.65686035e-07-1.43481445e-06j,\n",
       "       -6.33239746e-07+6.97998047e-07j,  4.11987305e-08+5.03234863e-07j,\n",
       "       -1.73095703e-07-1.93908691e-07j,  4.07165527e-07-3.91357422e-07j,\n",
       "        1.68090820e-07-2.59765625e-07j, -8.68774414e-07+5.61218262e-07j,\n",
       "        5.06896973e-07+5.33081055e-07j,  7.04956055e-08-7.11608887e-07j,\n",
       "        1.79992676e-07+1.47705078e-08j, -1.24389648e-07-9.27734375e-09j,\n",
       "        3.15490723e-07+6.32324219e-08j, -8.59863281e-07+3.45397949e-07j,\n",
       "        7.00378418e-07-2.95898437e-07j, -1.03131104e-06-4.29504395e-07j,\n",
       "        1.59246826e-06+6.15051270e-07j, -9.02099609e-07-4.33959961e-08j,\n",
       "       -3.09082031e-07-2.29614258e-07j,  5.68359375e-07-3.21044922e-07j,\n",
       "       -3.67126465e-07+1.31634521e-06j,  7.01110840e-07-6.77246094e-07j,\n",
       "       -5.10253906e-07-9.88952637e-07j,  2.99438477e-07+4.47814941e-07j,\n",
       "       -1.49090576e-06+2.63061523e-07j,  1.48632812e-06+7.41943359e-07j,\n",
       "        1.81823730e-07-5.18310547e-07j, -2.35290527e-07-4.85656738e-07j,\n",
       "       -3.89404297e-07-1.44104004e-07j, -7.04956055e-08-5.29174805e-08j,\n",
       "        2.21984863e-07+1.27563477e-06j,  3.76342773e-07-2.39929199e-07j,\n",
       "        5.27099609e-07-5.09643555e-07j, -1.29205322e-06-7.64526367e-07j,\n",
       "       -9.00878906e-08+7.85156250e-07j, -2.60803223e-07+6.41967773e-07j,\n",
       "        1.92041016e-06-2.28393555e-07j, -7.37121582e-07-1.04754639e-06j,\n",
       "       -1.03112793e-06-5.88745117e-07j, -3.00292969e-08+1.36901855e-06j,\n",
       "        5.78979492e-07-7.35778809e-07j,  6.17065430e-08+1.57965088e-06j,\n",
       "        7.19177246e-07-2.53784180e-07j,  3.27453613e-07-1.16156006e-06j,\n",
       "       -1.73614502e-06-7.00988770e-07j,  2.02636719e-08+6.28723145e-07j,\n",
       "       -9.26818848e-07+1.72308350e-06j,  3.02716064e-06-8.68041992e-07j,\n",
       "       -1.09356689e-06+1.03027344e-07j, -1.37695313e-07-1.88916016e-06j,\n",
       "       -3.67431641e-08+1.50689697e-06j, -8.83483887e-07-4.54040527e-07j,\n",
       "       -4.20532227e-08+1.01062012e-06j,  1.94525146e-06-3.80981445e-07j,\n",
       "       -1.72418213e-06-3.05175781e-08j,  1.47393799e-06-1.08776855e-06j,\n",
       "       -1.53698730e-06+5.89965820e-07j,  5.55358887e-07-2.40417480e-07j,\n",
       "       -2.48840332e-07+1.39990234e-06j,  1.29150391e-07-6.56311035e-07j,\n",
       "        1.04553223e-07-1.37878418e-07j,  1.19879150e-06-4.70336914e-07j,\n",
       "       -1.52960205e-06-4.69726562e-07j, -2.34985352e-07+8.17443848e-07j,\n",
       "        8.89282227e-08+1.03820801e-06j,  1.46148682e-06-5.13366699e-07j,\n",
       "       -2.11486816e-07-1.11370850e-06j, -1.18872070e-06+3.42712402e-07j,\n",
       "       -4.51660156e-09-2.19421387e-07j, -3.90625000e-07+8.18664551e-07j,\n",
       "        1.17895508e-06-1.37878418e-07j, -3.42773438e-07-2.73010254e-07j,\n",
       "        7.59155273e-07+6.82739258e-07j, -2.60986328e-07-1.23077393e-06j,\n",
       "        1.94946289e-07-1.58691406e-07j, -1.86877441e-06+2.02880859e-07j,\n",
       "        3.46252441e-07+1.42980957e-06j,  1.70831299e-06+2.78076172e-07j,\n",
       "       -7.37731934e-07-1.20916748e-06j,  6.32751465e-07-8.57360840e-07j,\n",
       "       -1.36071777e-06+8.85559082e-07j,  4.56787109e-07+3.81896973e-07j,\n",
       "       -4.83398437e-08-4.16870117e-08j,  3.81225586e-07-7.58178711e-07j,\n",
       "        1.33361816e-07+4.23889160e-07j,  7.14111328e-08-3.34899902e-07j,\n",
       "       -7.58422852e-07+6.67053223e-07j,  6.58935547e-07-5.06835938e-07j,\n",
       "       -1.38995361e-06-1.24267578e-07j,  1.40820312e-06+1.57391357e-06j,\n",
       "        3.59313965e-07-1.49114990e-06j, -7.64465332e-07+2.07092285e-07j,\n",
       "        6.39709473e-07-1.09631348e-06j, -1.70501709e-06+1.14685059e-06j,\n",
       "        1.04772949e-06+8.74877930e-07j,  1.00964355e-06-1.30566406e-06j,\n",
       "       -9.16198730e-07+7.66906738e-07j,  2.79541016e-08-1.14337158e-06j,\n",
       "       -7.86132813e-08+1.08160400e-06j,  6.50329590e-07-1.28723145e-07j,\n",
       "       -1.57092285e-06-5.21362305e-07j,  1.19537354e-06-2.59460449e-07j,\n",
       "       -4.49829102e-08+1.96368408e-06j,  2.66235352e-07-1.29980469e-06j,\n",
       "       -3.88427734e-07-7.49511719e-07j, -4.96887207e-07+6.89208984e-07j,\n",
       "        5.00976563e-07-3.36303711e-07j, -3.41064453e-07+1.04980469e-06j,\n",
       "        5.28015137e-07+8.60595703e-08j,  6.18835449e-07-1.51818848e-06j,\n",
       "       -1.62622070e-06+1.00415039e-06j,  5.73242187e-07-1.43365479e-06j,\n",
       "        5.27282715e-07+1.69134521e-06j, -8.94470215e-07+1.25427246e-07j,\n",
       "        9.28527832e-07-7.47924805e-07j,  5.34057617e-08-7.48291016e-08j,\n",
       "       -3.45947266e-07-5.37719727e-07j, -1.48376465e-07+6.90734863e-07j,\n",
       "       -6.29882812e-07+1.00091553e-06j,  1.17700195e-06-1.63952637e-06j,\n",
       "        8.82629395e-07+1.01672363e-06j, -1.98931885e-06-2.55572510e-06j,\n",
       "       -9.06860352e-07+3.44616699e-06j,  1.50170898e-06-2.11303711e-07j,\n",
       "        8.22509766e-07-7.55493164e-07j,  8.63342285e-07-7.52380371e-07j,\n",
       "       -1.61212158e-06-2.26257324e-07j, -1.93652344e-06-6.37390137e-07j,\n",
       "        1.94470215e-06+2.98461914e-06j,  3.36120605e-07-1.72387695e-06j,\n",
       "       -5.93261719e-07+8.52844238e-07j,  9.73999023e-07+4.93164063e-08j,\n",
       "        5.25451660e-07-2.11956787e-06j, -1.46191406e-06+3.25927734e-07j,\n",
       "       -1.48260498e-06+1.06201172e-06j,  1.23437500e-06+2.71057129e-07j,\n",
       "        7.26867676e-07+2.83752441e-07j,  9.55383301e-07-3.91601562e-07j,\n",
       "       -1.00213623e-06-1.37286377e-06j, -1.08288574e-06+1.72070312e-06j,\n",
       "        4.62707520e-07-8.82263184e-07j,  3.52233887e-07+2.58666992e-07j,\n",
       "        1.10467529e-06-1.19079590e-07j, -2.60028076e-06+1.56005859e-07j,\n",
       "        2.42156982e-06+5.74340820e-07j, -1.53015137e-07-8.47839355e-07j,\n",
       "       -5.67626953e-07-1.13220215e-06j, -1.10559082e-06+1.49755859e-06j,\n",
       "       -5.57922363e-07+1.33581543e-06j,  2.80316162e-06-1.17071533e-06j,\n",
       "       -1.66198730e-07+5.72875977e-07j, -1.38171387e-06-2.84271240e-06j,\n",
       "        1.99707031e-07+1.81481934e-06j, -1.06909180e-06-3.31726074e-07j,\n",
       "        6.13403320e-08+2.11724854e-06j,  2.33789062e-06-9.20532227e-07j,\n",
       "       -4.39880371e-07-1.76715088e-06j, -1.48742676e-06+1.74822998e-06j,\n",
       "        1.45330811e-06-2.49670410e-06j, -8.01818848e-07+2.49810791e-06j,\n",
       "       -1.88891602e-06-6.18835449e-07j,  2.36175537e-06+7.86560059e-07j,\n",
       "        7.13500977e-07-1.38391113e-06j, -1.29052734e-06+5.20935059e-07j,\n",
       "       -6.20361328e-07-4.08996582e-07j,  1.15667725e-06+1.37652588e-06j,\n",
       "       -8.89892578e-08-1.87835693e-06j, -8.52722168e-07+4.85595703e-07j,\n",
       "       -1.11938477e-07+1.36187744e-06j,  9.46228027e-07-8.60961914e-07j,\n",
       "        5.36987305e-07+2.91809082e-07j, -8.28491211e-07-5.75683594e-07j,\n",
       "       -2.10693359e-07-5.47851562e-07j, -9.21813965e-07+1.10064697e-06j,\n",
       "        1.08526611e-06-2.10449219e-07j,  1.78771973e-07+5.76904297e-07j,\n",
       "        9.97314453e-08-9.55078125e-07j,  8.03955078e-07-9.15527344e-09j,\n",
       "       -1.32336426e-06+3.13720703e-08j, -4.32189941e-07-3.13537598e-07j,\n",
       "        5.12695312e-07+8.31115723e-07j, -3.33190918e-07+4.90234375e-07j,\n",
       "        1.21929932e-06-6.94458008e-07j, -5.60363770e-07-8.09692383e-07j,\n",
       "       -6.84936523e-07+1.29174805e-06j,  1.02001953e-06-7.97546387e-07j,\n",
       "       -1.08953857e-06+3.01269531e-07j,  1.40118408e-06-7.99926758e-07j,\n",
       "       -1.69818115e-06+1.30078125e-06j,  9.54040527e-07-7.24182129e-07j,\n",
       "        7.39074707e-07+1.03424072e-06j, -1.16070557e-06-1.82812500e-06j,\n",
       "        4.79003906e-07+6.42028809e-07j, -1.35229492e-06+8.03039551e-07j,\n",
       "        1.67852783e-06-9.54895020e-07j, -5.76782227e-08+7.91748047e-07j,\n",
       "       -1.61071777e-07+3.51806641e-07j,  2.25646973e-07-9.31945801e-07j,\n",
       "       -4.60693359e-07-3.68286133e-07j, -2.12341309e-07+6.74438477e-08j,\n",
       "       -8.72253418e-07+7.57324219e-07j,  1.69213867e-06+5.44616699e-07j,\n",
       "       -5.68542480e-07-8.17871094e-09j,  5.37109375e-07-1.06866455e-06j,\n",
       "       -5.32470703e-07-1.77612305e-07j, -2.60437012e-07+5.48278809e-07j,\n",
       "       -8.38623047e-08-9.41162109e-08j, -1.70837402e-07-2.16186523e-07j,\n",
       "        6.95739746e-07+1.18597412e-06j,  5.21667480e-07-1.60339355e-06j,\n",
       "       -8.67492676e-07+8.88854980e-07j,  3.30566406e-07-3.88061523e-07j,\n",
       "       -8.89221191e-07+6.14013672e-08j,  9.30969238e-07-1.05163574e-07j,\n",
       "       -6.01135254e-07+7.31140137e-07j,  8.11706543e-07-7.13378906e-07j,\n",
       "       -8.11950684e-07+4.55505371e-07j,  8.16284180e-07-9.78393555e-08j,\n",
       "       -7.89733887e-07-9.28833008e-07j,  3.18054199e-07+7.42004395e-07j,\n",
       "        4.04663086e-08+7.63977051e-07j,  1.60766602e-07-6.15783691e-07j,\n",
       "       -1.83288574e-07+1.52587891e-07j, -6.17675781e-08-1.02301025e-06j,\n",
       "        1.78710938e-07+7.53540039e-07j, -7.37243652e-07-1.99096680e-07j,\n",
       "        8.30932617e-07+4.75402832e-07j, -1.60949707e-07+2.42492676e-07j,\n",
       "        5.86059570e-07-5.55175781e-07j, -8.86718750e-07-2.46520996e-07j,\n",
       "       -1.75781250e-08-1.50756836e-07j, -3.23059082e-07+8.53820801e-07j,\n",
       "        1.31921387e-06-3.34472656e-07j, -8.36853027e-07-7.61596680e-07j,\n",
       "       -4.83703613e-07+1.34631348e-06j,  1.13873291e-06-8.97216797e-07j,\n",
       "       -4.01611328e-07+7.88696289e-07j, -1.93298340e-07-6.61010742e-07j,\n",
       "        2.50732422e-07-2.18994141e-07j, -7.07275391e-07-9.89990234e-08j,\n",
       "        7.46276855e-07+8.70605469e-07j, -3.98193359e-07-2.37548828e-07j,\n",
       "        1.37573242e-07-7.63549805e-08j, -2.46826172e-07-3.52294922e-07j,\n",
       "        3.33190918e-07+4.59594727e-07j,  2.12463379e-07-6.11206055e-07j,\n",
       "       -3.09997559e-07+3.72253418e-07j,  1.23107910e-07+3.18908691e-07j,\n",
       "        1.52221680e-07-6.76025391e-07j, -4.66369629e-07+2.07031250e-07j,\n",
       "       -3.00476074e-07+1.98791504e-07j,  2.23083496e-07+2.53662109e-07j,\n",
       "        8.48999023e-07-2.37854004e-07j,  2.21008301e-07-6.94580078e-08j,\n",
       "       -1.04833984e-06-6.71386719e-08j,  3.40515137e-07-5.54748535e-07j,\n",
       "       -9.27612305e-07+7.31384277e-07j,  7.02087402e-07+4.63562012e-07j,\n",
       "        4.55261230e-07+1.45812988e-07j,  7.47802734e-07-1.28802490e-06j,\n",
       "       -1.00598145e-06-4.69970703e-09j, -6.35742187e-07+5.24597168e-07j,\n",
       "        2.38586426e-07-3.30200195e-08j, -2.21557617e-08+1.44165039e-07j,\n",
       "        6.17126465e-07+8.84887695e-07j,  1.08886719e-07-9.68627930e-07j,\n",
       "       -2.18566895e-07-4.87548828e-07j,  9.99145508e-08+2.27416992e-07j,\n",
       "       -9.36096191e-07+6.96411133e-08j,  5.10620117e-07+7.73498535e-07j,\n",
       "        3.72497559e-07-1.89208984e-07j,  4.23645020e-07-2.86560059e-07j,\n",
       "       -5.04089355e-07-1.52770996e-07j, -2.91503906e-07-4.63195801e-07j,\n",
       "        6.87255859e-08+3.09020996e-07j, -3.58947754e-07+7.93457031e-08j,\n",
       "        6.42639160e-07+1.07232666e-06j,  1.90246582e-07-1.37042236e-06j,\n",
       "       -4.64904785e-07+5.12145996e-07j,  3.64379883e-07+2.80761719e-08j,\n",
       "       -1.75415039e-07-5.52062988e-07j, -2.53967285e-07+2.89611816e-07j,\n",
       "        1.14624023e-07+4.50073242e-07j, -4.24255371e-07-6.94580078e-08j,\n",
       "        7.94372559e-07-3.75000000e-07j, -1.99157715e-07+4.77050781e-07j,\n",
       "        1.95312500e-09-4.76074219e-07j, -2.16674805e-08+2.30285645e-07j,\n",
       "       -9.79614258e-08-5.18737793e-07j, -7.09655762e-07+8.06152344e-07j,\n",
       "        8.15124512e-07-5.60913086e-07j,  2.90954590e-07+3.87573242e-08j,\n",
       "       -1.43005371e-07+6.39099121e-07j, -1.69067383e-08-6.22253418e-07j,\n",
       "       -3.48571777e-07+6.05468750e-08j, -1.45202637e-07+3.63281250e-07j,\n",
       "        3.41918945e-07-3.38806152e-07j, -1.98669434e-07-5.18798828e-09j,\n",
       "        1.13708496e-07+1.22314453e-07j,  4.03442383e-08-1.13403320e-07j,\n",
       "        6.12182617e-08+1.25488281e-07j,  2.89916992e-08-8.80126953e-08j,\n",
       "       -4.17968750e-07+2.64831543e-07j,  8.57299805e-07-2.75634766e-07j,\n",
       "       -7.31018066e-07-7.15942383e-08j,  1.27075195e-07-4.13574219e-07j,\n",
       "       -4.18151855e-07+7.71911621e-07j,  6.33239746e-07-3.89160156e-07j,\n",
       "       -1.16271973e-07+2.34741211e-07j,  2.70263672e-07+1.38549805e-07j,\n",
       "       -2.38403320e-07-6.23657227e-07j, -4.66735840e-07+6.22314453e-07j,\n",
       "        3.28186035e-07-2.68798828e-07j,  1.92626953e-07+2.99072266e-09j,\n",
       "        7.22045898e-08+2.64038086e-07j,  3.37524414e-08-4.75769043e-07j,\n",
       "       -6.17248535e-07+1.59240723e-07j,  3.00231934e-07+1.32141113e-07j,\n",
       "       -1.62231445e-07+1.41357422e-07j,  5.93811035e-07-2.03735352e-07j,\n",
       "       -3.30017090e-07+1.08642578e-08j, -6.56738281e-08-2.34741211e-07j,\n",
       "        1.20910645e-07+3.16833496e-07j, -4.80163574e-07+6.21948242e-08j,\n",
       "        5.90270996e-07+3.66210938e-10j, -1.61865234e-07-1.99096680e-07j,\n",
       "        4.21203613e-07+1.01318359e-07j, -6.79748535e-07-2.89306641e-07j,\n",
       "        1.67846680e-07+2.72766113e-07j, -1.46911621e-07-1.40136719e-07j,\n",
       "        2.01599121e-07+3.80004883e-07j,  1.92871094e-08-2.80700684e-07j,\n",
       "        1.54968262e-07-1.48010254e-07j, -4.03930664e-07+2.47131348e-07j,\n",
       "        3.86291504e-07-1.21398926e-07j, -1.60278320e-07-2.96264648e-07j,\n",
       "       -3.30200195e-08+6.01318359e-07j,  1.42089844e-07-2.65502930e-07j,\n",
       "       -8.42285156e-08-8.96606445e-08j,  3.06335449e-07+2.46520996e-07j,\n",
       "       -7.38525391e-07-4.99084473e-07j,  2.16857910e-07+5.99609375e-07j,\n",
       "        4.90173340e-07-2.20458984e-07j, -3.68652344e-07+8.75854492e-08j,\n",
       "        1.22924805e-07-4.07165527e-07j, -1.41845703e-07+4.63439941e-07j,\n",
       "        2.81799316e-07-2.04772949e-07j, -1.10656738e-07-2.28637695e-07j,\n",
       "       -1.59240723e-07+5.49804688e-07j, -1.04736328e-07-5.85632324e-07j,\n",
       "        2.03613281e-07+3.78906250e-07j,  1.40380859e-07-8.89892578e-08j,\n",
       "       -1.87377930e-07-5.31005859e-08j,  1.38549805e-07+1.47705078e-08j,\n",
       "        5.79223633e-08+1.37634277e-07j, -5.55480957e-07-6.60400391e-08j,\n",
       "        5.80261230e-07-4.24804688e-08j, -3.79516602e-07+3.90625000e-09j,\n",
       "        3.87023926e-07-4.44946289e-08j, -2.69104004e-07+6.20117187e-08j,\n",
       "       -2.36206055e-08+5.63964844e-08j, -9.49096680e-08-1.74072266e-07j,\n",
       "        5.17150879e-07+1.85668945e-07j, -4.23583984e-07+1.12609863e-07j,\n",
       "        2.25158691e-07-4.99816895e-07j, -1.40747070e-07+3.00598145e-07j,\n",
       "        9.04541016e-08+1.05468750e-07j, -3.46679688e-07-3.08654785e-07j,\n",
       "        1.83288574e-07+3.87878418e-07j,  2.18322754e-07-1.27258301e-07j,\n",
       "       -6.10961914e-08-2.56713867e-07j, -2.75878906e-08+2.52868652e-07j,\n",
       "       -4.16870117e-08-6.77490234e-08j, -2.93579102e-08+1.54357910e-07j,\n",
       "       -1.45935059e-07-3.02978516e-07j,  4.31091309e-07+1.88110352e-07j,\n",
       "       -2.75939941e-07+2.65502930e-08j, -1.30187988e-07+9.33837891e-09j,\n",
       "        2.28027344e-07-7.91015625e-08j, -2.09350586e-08-5.07812500e-08j,\n",
       "       -3.75976563e-08+1.64794922e-09j, -1.81396484e-07+1.58264160e-07j,\n",
       "        2.62207031e-07-1.11633301e-07j, -1.46911621e-07-1.89208984e-09j,\n",
       "        8.83178711e-08+1.15539551e-07j, -4.44946289e-08-7.66601562e-08j,\n",
       "       -3.30810547e-08-1.32995605e-07j,  1.24450684e-07+1.27197266e-07j,\n",
       "       -1.41906738e-07+3.84521484e-08j,  1.02172852e-07-6.61621094e-08j,\n",
       "       -1.15600586e-07-5.79833984e-09j,  1.76940918e-07+4.41894531e-08j,\n",
       "       -1.57104492e-07+1.81274414e-08j,  2.63061523e-08-9.10644531e-08j,\n",
       "        5.56640625e-08+5.29785156e-08j, -8.75244141e-08-1.06201172e-08j,\n",
       "        7.51342773e-08+2.59399414e-08j, -3.49731445e-08-5.24902344e-09j,\n",
       "        1.14135742e-08-2.70996094e-08j,  3.90625000e-08+1.64184570e-08j,\n",
       "       -8.10546875e-08-2.86865234e-09j,  9.33837891e-08+3.96728516e-09j,\n",
       "       -8.21533203e-08-4.10766602e-08j,  5.23071289e-08+4.09545898e-08j,\n",
       "       -3.30810547e-08-1.51977539e-08j,  6.95800781e-09+3.02124023e-08j,\n",
       "       -2.49023437e-08-5.37109375e-09j,  7.87353516e-08-4.01611328e-08j,\n",
       "       -6.92749023e-08+3.55224609e-08j,  4.27856445e-08-1.33666992e-08j,\n",
       "       -1.44653320e-08+5.73730469e-09j, -2.82592773e-08+4.82177734e-09j,\n",
       "        2.05688477e-08+5.18798828e-09j,  7.87353516e-09-9.21630859e-09j,\n",
       "       -3.78417969e-09+7.75146484e-09j, -1.12915039e-08-1.26342773e-08j,\n",
       "        2.11181641e-08+2.13623047e-09j, -2.67944336e-08-1.67846680e-08j,\n",
       "        1.47705078e-08+3.70483398e-08j, -2.44140625e-10-2.44750977e-08j,\n",
       "       -3.47900391e-09-4.88281250e-10j,  7.62939453e-09+9.94873047e-09j,\n",
       "       -1.22070312e-10+1.89208984e-09j, -5.67626953e-09-8.11767578e-09j,\n",
       "        7.93457031e-10+2.01416016e-09j,  1.40380859e-09-2.13623047e-09j,\n",
       "       -1.10473633e-08+0.00000000e+00j])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "out_rfft * 2**(-8-Shift)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
